프로그래밍 TIP/Spring

Spring3.0 스케줄링

여름나라겨울이야기 2013. 1. 25. 11:10
728x90

Spring 설정 XML 파일 (context-schedule.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:context="http://www.springframework.org/schema/context"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-3.0.xsd">

    <context:component-scan base-package="tipNTech.schedule" />
	
    <task:annotation-driven />
</beans>

task 네임스페이스 추가
  xmlns:task=http://www.springframework.org/schema/task

 

  xsi:schemaLocation="
                                 http://www.springframework.org/schema/task
                                 http://www.springframework.org/schema/task/spring-task-3.0.xsd"

 

task 를 @ 애너테이션 기반으로 자동 검색

 

<task:annotation-driven/>

 

또는 아래와 같이 구체적으로 기술

 

<bean id="mySchedule " class="tipNTech.schedule.MySchedule" />
 
<task:scheduler id="gsScheduler" pool-size="10" />
<task:executor id="gsTaskExecutor" pool-size="10" />
<task:annotation-driven executor="gsTaskExecutor" scheduler="gsScheduler" />

 

Java 소스
package tipNTech.schedule;

import org.springframework.stereotype.Component;
import org.springframework.scheduling.annotation.Scheduled;

@Component
public class MySchedule {
    @Scheduled(cron="*/5 * * * * *") // 5초 간격 실행
    public void updateUrbanServiceArea() {
    	java.util.Calendar calendar = java.util.Calendar.getInstance();
    	java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	System.out.println("현재 시각: " +  dateFormat.format(calendar.getTime()));
    }
}

 

@Scheduled 애너테이션 사용

 

참고 cron 표현식

 

cron="분 시 일 월 요일 [년도]"

 

Cron 표현식

총 7개의 필드 있고 마지막 필드(년도)는 생략 가능하다

필드이름

허용 값

초(Seconds)0 ~ 59
분(Minutes)0 ~ 59

시(Hours)

0 ~ 23

날(Day-of-month)

1 ~ 31
달(Month) 1 ~ 12 or JAN ~ DEC

요일(Day-of-week)

1 ~ 7 or SUN-SAT
년도(Year) (선택가능) 빈값, 1970 ~ 2099

Cron 표현식의 특수문자

표현식

설명

예시

* 모든 수를 나타냄
-값의 사이를 의미* 10-13 * * * * 10,11,12,13분에 동작함
,특정값 지칭* 10,11,13 * * * * 10,11,13분에 동작함
/값의 증가를 표현* 0/5 * * * * 0분부터 시작해서 5분마다 동작
?특별한 값이 없음을 나타냄(day-of-month, day-of-week 필드만 사용)
L마지막 날을 나타냄(day-of-month, day-of-week 필드만 사용)

* * * * * 7L 해당월의 마지막 토요일을 의미

 

테스트 코드
package tipNTech.schedule;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class Driver {
    public static void main(String[] args) {
        ApplicationContext context = 
               new FileSystemXmlApplicationContext(
                    "/src/main/java/tipNTech/schedule/context-schedule.xml"
               );
        }
}

 

테스트 결과

 

 

반응형