반응형
일정주기마다 특정 작업을 실행하기 위해 스프링 스케쥴러를 사용하여 구현하는 방법을 살펴보자.
Scheduler Class 생성
package com.haenny;
public class Test {
public void start() {
// 주기적으로 실행할 코드
}
}
dispatcher-servlet.xml 설정
일정 주기마다 실행하는 스케쥴러 등록을 위해 bean 태그에 task를 추가한다.
/* 스케줄러를 위한 xmlns */
xmlns:task="http://www.springframework.org/schema/task"
/* task shcema */
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
위에서 생성한 스케쥴러 클래스 bean을 추가한다.
/* 스케쥴러 파일의 참조 id와 패키지 설정 */
<bean id="testScheduler" class="com.haenny.Test" />
<task:scheduler id="taskScheduler" pool-size="10" />
<task:scheduled-tasks scheduler="taskScheduler">
/* 스케쥴러 파일의 참조 id와 메소드명, cron 표현식 설정 */
<task:scheduled ref="testScheduler" method="start" cron="0/10 * * * * *" />
</task:scheduled-tasks>
크론 표현식
크론(Cron)을 구동할 때 스케쥴링의 파라미터로 사용되는 식을 크론 표현식(Cron Expressions)라고 한다. 유닉스/리눅스 기반의 스케쥴러에도 사용되지만 Quatz 스케줄러 에서도 사용된다. 크론 표현식은 필드와 특수문자를 조합하여 스케쥴링을 조절할 수 있다.
크론 표현식: 구성
크론 표현식은 아래와 같은 형태로 구성된다. 리눅스/유닉스 크론 표현식에서는 5개 필드가 사용되고, 쿼츠 크론 표현식에서는 7개의 필드가 사용된다.
초 분 시 일 월 주 년
크론 표현식: 필드
초(Seconds)
- 값 범위 : 0 ~ 59
- 허용 특수문자 : * , - /
- 리눅스/유닉스 크론탭에서는 사용되지 않는다.
분(Minutes)
- 값 범위 : 0 ~ 59
- 허용 특수문자 : * , - /
시(Hours)
- 값 범위 : 0 ~ 23
- 허용 특수문자 : * , - /
일(Day of month)
- 값 범위 : 1 ~ 31
- 허용 특수문자 : * , - ? L W
월(Month)
- 값 범위 : 1 ~ 12 또는 JAN ~ DEC
- 허용 특수문자 : * , - /
주(Day of week)
- 값 범위 : 0 ~ 6 또는 SUN ~ SAT
- 허용 특수문자 : * , - ? L #
년(Year)
- 값 범위 : 생략 또는 1970 ~ 2099
- 허용 특수문자 : * , - /
- 리눅스/유닉스 크론탭에서는 사용되지 않는다.
크론 표현식: 특수문자
- * : 모든 값(매시, 매일, 매주처럼 사용한다.)
- ? : 특정 값이 아닌 어떤 값이든 상관 없음
- - : 범위를 지정할 때
- , : 여러 값을 지정할 때
- / : 증분값, 즉 초기값과 증가치를 설정할 때
- L : 지정할 수 있는 범위의 마지막 값 표시
- W : 가장 가까운 평일(weekday)을 설정할 때
- # : N번 째 특정 요일을 설정할 때
크론 표현식 예제
매 10분마다
0 0/10 * * * *
매 3시간마다
0 0 0/3 * * *
2018년도 매일 14시 30분마다
0 30 14 * * * 2018
매일 10시 ~ 19시 사이에 10분 간격으로
0 0/10 10-19 * * *
매일 10시와 19시에만 10분 간격으로
0 0/10 10,19 * * *
매달 25일 01시 30분에
0 30 1 25 * *
매주 월, 금요일 10시와 19시 사이 10분마다
0 10 10-19 ? * MON,FRI
매달 마지막날 15시 30분
0 30 15 L * *
2017~2018년 매월의 마지막 토요일 오후 1시 20분
0 20
728x90
반응형
'JVM > Spring' 카테고리의 다른 글
[Spring] Request Parameter (QueryString, Json) 데이터와 Annotation (@RequestParam, @RequestBody) 알고 쓰자 (0) | 2022.04.05 |
---|---|
[MyBatis] Dynamic Query Map(or Value Object) 파라메터 foreach 문법에 key, value 사용하기 (0) | 2022.03.15 |
[Web] 415 (Unsupported Media Type) 오류 원인 살펴보기 (1) | 2022.02.18 |
[Spring] 스프링 properties 설정 파일 분리하기 (0) | 2022.01.26 |
[Web] 파일업로드 시 404 에러 (Current request is not of type ) (0) | 2021.12.09 |
댓글