Scheduler
#
Find similar titles
- (rev. 9)
- dongiljogun
Structured data
- Category
- Database
Spring Scheduler #
일정 주기마다 프로그램을 자동으로 실행하는 방법이다. 정기적으로 실행해야 하는 테스크가 있을 때 일정 시간 간격으로 로직을 실행하거나, 일정 스케쥴러는 그런 테스크를 처리하기에 유용하게 사용 할 수 있다. 예를 들어 일주일에 한 번씩 또는 한 달에 한 번씩, 10초에 한 번씩 지정한 로직을 수행할 수 있도록 하는 것이다.
실행 방법 #
1.ispatcher-servlet.xml추가(코드1 참고)
그림1. scheduler를 위한 XML 추가 위치(출처 https://m.blog.naver.com/deeperain/221609802306)
코드 1 #
/* 스케줄러를 위한 xmlns */
xmlns:task="http://www.springframework.org/schema/task"
/* task 스키마 */
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd"
2.context:component-scan 설정(코드2 참고)
그림2. scheduler를 위한 component-scan 추가 위치(출처 https://m.blog.naver.com/deeperain/221609802306)
스케줄러 파일이 존재할 수 있도록 설정해주어야 한다.
코드 2 #
<!-- 스케쥴러 파일이 존재하는 패키지 설정 -->
<context:component-scan base-package="패키지 경로" />
<!-- 해당 태그들은 크론탭을 설정에 필요한 태그들 -->
<task:scheduler id="jobScheduler" pool-size="10" />
<task:annotation-driven scheduler="jobScheduler" />
3.scheduler class file 사용방법 - 클래스에 컴포넌트를 달아주고 스케쥴러를 사용하면 된다.
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class Scheduler {
/**
* 1. 매월 1일 새벽 2시에 자동으로 결제완료하는 스케쥴러
*/
// * 을 입력 할 경우 모두(항상)으로 설정함.
// 초 분 시 일 월 요일
@Scheduled(cron = "0 14 14 * * *")
public void autoUpdate(){
System.out.println("오후 02:14:00에 호출이 됩니다 ");
}
cron 표현식 #
크론 표현 식에서는 6~7자리가 사용된다. cron = " * * " 초 분 시 일 월 요일 년도(생략 가능) - 요일 : 0-7, SUN-SAT (0:일, 1:월, 2:화, 3:수, 4:목, 5:금, 6:토, 7:일 / 0, 7 모두 일요일)
위의 예에서 *(아스타)는 ALL(모든) 것을 의미
?(물음표) : 특정 값이 없을 때(어떤 값이든 상관 X), 날짜와 요일에만 사용 가능
-(하이픈) : 범위 값을 지정할 때
,(콤마) : 여러 값을 지정할 때
/(슬러시) : 초깃값과 증가치 설정할 때
L(대문자엘) : 지정할 수 있는 범위의 마지막 값 설정할 때, 날짜와 요일에만 사용 가능
W(대문자 더블유) : 월~금요일 또는 가장 가까운 월, 금요일을 설정할 때
#(샵) : 몇번째 특정 요일을 설정할 때
크론 표현식의 예 #
<!-- 5분마다 실행 ex) 00:05, 00:10. 00:15.... -->
cron = "0 0/5 * * * *"
<!-- 1시간마다 실행 ex) 01:00, 02:00, 03:00.... -->
cron = "0 0 0/1 * * *"
<!-- 매일 오후 18시마다 실행 ex) 18:00 -->
cron = "0 0 18 * * *"
<!-- 2018년도만 매일 오후 18시마다 실행 ex) 18:00 -->
cron = "0 0 18 * * * 2018"
<!-- 매일 오후 18시00분-18시55분 사이에 5분 간격으로 실행 ex) 18:00, 18:05.....18:55 -->
cron = "0 0/5 18 * * *"
<!-- 매일 오후 9시00분-9시55분, 18시00분-18시55분 사이에 5분 간격으로 실행 -->
cron = "0 0/5 9,18 * * *"
<!-- 매일 오후 9시00분-18시55분 사이에 5분 간격으로 실행 -->
cron = "0 0/5 9-18 * * *"
<!-- 매달 1일 00시에 실행 -->
cron = "0 0 0 1 * *"
<!-- 매년 3월내 월-금요일 10시 30분에만 실행 -->
cron = "0 30 10 ? 3 MON-FRI"