스프링의 스케쥴러를 사용하기 위해

servlet-context.xml에 task를 추가한다

1

xmlns:task=http://www.springframework.org/schema/task


xsi:schemaLocation 에도 추가

1

2

http://www.springframework.org/schema/task

http://www.springframework.org/schema/task/spring-task-3.2.xsd


아래 내용도 추가

1

2

3

<task:executor id="executor" pool-size="5-10" queue-capacity="255" />

<task:scheduler id="scheduler" pool-size="3" />

<task:annotation-driven executor="executor" scheduler="scheduler" />



void타입의 return 이 없고 파라미터가 없는 메서드에 사용가능하다

@Scheduled(fixedRate=5000)

fixedRate : 지정한 시간 주기로 작업을 실행
fixedDelay : 지정된 시간 간격으로 작업을 실행
cron : cron 표현식을 이용해서 작업을 실행

5000 -> 5초


아래 오류 발생시...
cvc-complex-type.2.4.c: The matching wildcard is strict...

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 이 부분을
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 으로 변경해주면
오류는 발생하지 않는다. (3.0에서 3.2로)

 

 

 

---------------------------------------------------------------------

출처http://iris2380.egloos.com/266805  //xml 설정 관련 부분 참조

         http://blog.naver.com/PostView.nhn?blogId=charmhcs&logNo=30143084054 // 설정 소스 코드 부분 참조

   http://expert0226.tistory.com/207 // cron 명령어 부분 참조

1. 설정 

아래와 같이 스키마 추가

--------------------

xmlns:task="http://www.springframework.org/schema/task"

http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd

--------------------

 

아래와 같이 설정 추가

특별히 이름의 의미는 없다. 그냥 그대로 쓰면 된다.

스케줄러 10, 실행 10개라고 생각하면 .. (솔직히 정확한 의미는 모르겠다;; 대충;;)

--------------------

    <task:scheduler id="taskScheduler" pool-size="10" />

    <task:executor id="taskExecutor" pool-size="10"/>

    <task:annotation-driven executor="taskExecutor" scheduler="taskScheduler"/>

--------------------

 

 

2. 메소드에서 실행.

--------------------

//10:40 (cron="0 40 10 ? * THU")

@Scheduled(cron="10 11 22 ? * WED")

public void sendMail_THU(){

sendMail("PM", "A", "");

}

--------------------

 

@Scheduled(fixedRate=1000) // 1초마다 한번씩 실행

@Scheduled(fixedDelay=1000) // 메서드 종료 시점에서 1초후 실행

 

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 필드만 사용)

 

 

 

Posted by wychoi
,