본문 바로가기

[공부용]참고 사이트 모음/[SPRING]

Spring Scheduler(스프링 스케쥴러) 설정방법 및 사용방법

https://blog.naver.com/cyon24/203674742

 

Spring Scheduler(스프링 스케쥴러) 설정방법 및 사용방법

스프링에서 Unix의 Corn 처럼 특정시간 혹은 몇분 혹은 몇시간마다 동작해는 스케쥴러를 구현해야 했다. ...

blog.naver.com

스프링에서 Unix의 Corn 처럼 특정시간 혹은 몇분 혹은 몇시간마다 동작해는 스케쥴러를 구현해야 했다.

그래서 찾아보게 된게 Spring + Quartz Scheduler 조합의 활용이었다.

하지만 Spring 3.1 버전 부터는 Quartz Scheduler를 사용하지 않고도 Scheduler를 통한 Job을 실행할 수

있게 되었다.

 

더구나 그 설정 방법조차 무척이나 간단하게 설정이 가능하다.

설정 방법은 두가지이다.

 

첫번째 방법은 Annotion 이용하는 방법이며

두번째 방법은 XML에 직접 기술해 주는 방법이다.

 

1. Annotation 설정방법

 

1) XML 설정 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task-3.0.xsd">
       
    <task:annotation-driven />
   
</beans>

 

위와 같이 기술 후 저장하고 저장된 XML을 Spring contextConfigLocation 설정 파일에 추가해

주거나 component-scan XML에 추가해주면 된다.

 

2) Annotation 사용예시

 

@Service 

public class TaskTestService {

    @Scheduled(fixedDelay=1000)
    public void TestScheduler(){
        System.out.println("스케줄링 테스트");
    }

 

위와 같이 @Scheduled 어노테이션을 이용하여 간단하게 스케쥴에 따른 작업을 처리할 수 있게 된다.

@Scheduled 의 value 같은 3가지(cron, fixedDelay, fixedRate) 종류가 있다.

 

cron은 CronTab에서의 설정과 같이 cron="0/10 * * * * ?" 과 같은 설정이 가능하고

fixedDelay은 이전에 실행된 Task의 종료시간으로 부터 정의된 시간만큼 지난 후 Task를 실행한다.(밀리세컨드 단위)

fixedRate은 이전에 실행된 Task의 시작시간으로 부터 정의된 시간만큼 지난 후 Task를 실행한다.(밀리세컨드 단위)

 

3) Cron Expression

 

왼쪽부터 오른쪽순으로 다음과 같은 의미가 있다.

  

 Seconds   0 ~ 59
 Minutes  0 ~ 59
 Hours  0 ~ 23  
 Day of Month  1 ~ 31
 Month  1 ~ 12 
 Day of Week  1 ~ 7 (1 => 일요일, 7=> 토요일 / MON,SUN...) 
 Years(optional)  1970 ~ 2099 


사용 특수문자의 사용은 아래와 같은 의미가 있다.

 

 *  모든수를 의미, Minutes 위치에 사용될 경우 매분마다 라는 뜻 
 ?  Day of Month, Day of Week에만 사용 가능, 특별한 값이 없다는 뜻 
 -  기간을 설정, Hour 위치에 10 - 12 라고 쓰면 10, 11, 12dp 동작하라는 뜻 
 ,  특정 시간을 설정. Day of Week 위치에 2, 4, 6 이라고 쓰면 월, 수, 금에만 동작하라는 뜻 
 /  증가를 표현, Seconds 위치에 0/15로 설정되어 있으면, 0초에 시작해서 15초 간격으로 동작
 하라는 뜻 
 L  Day Of Month 에서만 사용하며, 마지막 날의 의미 Day of Month 에 L로 설정되어 있으면 그달
 의 마지막날에 실행하라는 의미 
 W  Day of Month 에만 사용하며, 가장 가까운 평일을 의미. 15W로 설정되어 있고 15일이 토요일
 이며, 가장 가까운 평일인 14일 금요일에 실행, 15일이 일요일이면 16일 월요일에 실행된다.
 15일이 평일이면 그날 그대로 실행됨 
 LW  L과 W를 결합하여 사용, 그달의 마지막 평일의 의미 
 #  Day of Week에 사용, 6#3 의 경우 3번째 주 금요일에 실행된다. 

 

사용 예

0 0 12 * * *           ==> 매일 12시에 실행

0 15 10 * * *         ==> 매일 10시 15분에 실행

0 * 14 * * *           ==> 매일 14시에 실행

0 0/5 14 18 * * *    ==> 매일 14시, 18시에 시작해서 5분간격으로 실행

0 0-5 14 * * *        ==> 매일 14시에 시작해서 0분동안 실행 

 

2. XML 설정방법


1)XML설정 방법

 

<task:scheduler id="scheduler" pool-size="2"/>
<task:scheduled-tasks scheduler="scheduler" >
    <task:scheduled ref="TaskTestService" method= "doJob" cron="0/4 * * * * ?" />
</task:scheduled-tasks>  

 

위와 같이 기술 후 저장하고 저장된 XML을 Spring contextConfigLocation 설정 파일에 추가해

주거나 component-scan XML에 추가해주면 된다.

 

2) 사용방법

 

@Service
public class TaskTestService {
    public void doJob(){
        System.out.println("스케줄링 중~~~!");
    }

 

위와 같이 XML에 설정된 Class에 Method에 해당 작업내용을 기술해 놓으면  

된다.

 

3. 결과

위와 같은 작업을 실행하면 아래와 같은 결과를 얻을수 있다.

 

 

 

 

 

[출처] Spring Scheduler(스프링 스케쥴러) 설정방법 및 사용방법|작성자 레츠비