Scheduled 어노테이션 사용으로 ,
이 어노테이션을 이용하여 스케줄링 프로그램을 작성할 수 있다.
@Scheduled 어노테이션은 cron 표현식의 String 문자열을 인자로 받아서 동작한다.
@Scheduled 어노테이션을 사용하기 위해서는
Application 클래스에
@EnableScheduling
어노테이션을 붙여주어야 한다.
리눅스 및 유닉스 기반 운영 체제에서 스케줄 작업을 지정하는 데 사용되는 표현식.
초 분 시 일 월 요일
초 (0-59) 분 (0-59) 시 (0-23) 일 (1-31) 월 (1-12) 요일 (0-7, 일요일=0 또는 7)
*
: 모든 값.
,
: 값의 리스트. 쉼표로 구분된 여러 값을 지정할 수 있다.
-
: 범위. 시작 값과 끝 값을 지정하여 범위를 나타낼 수 있다.
/
: 간격. 시작 값부터 주어진 간격으로 값을 지정할 수 있다.
?
: 특정 값 없음. 일 또는 요일 필드에서만 사용된다.
" 해당 필드에 대해 특정한 값이 없음 "을 나타낸다.
L
: 마지막 값. 일 또는 요일 필드에서만 사용된다.
" 해당 필드의 마지막 값을 나타냄 "을 의미
W
: 가장 가까운 평일. 일 필드에서만 사용된다.
" 가장 가까운 평일(월-금)을 나타냄 "을 의미
#
: 주차. 일 필드에서만 사용된다.
" 해당 월의 몇 번째 주의 요일 "을 지정
@Scheduled(cron = "0 0 12 * * ?") // 매일 정오(12시)에 실행
@Scheduled(cron = "0 15 10 ? * MON-FRI") // 평일(월요일부터 금요일) 오전 10시 15분에 실행
@Scheduled(cron = "0 0/5 14,18 * * ?") // 매일 오후 2시부터 6시까지 5분마다 실행
@Scheduled(cron = "0 0 23 ? * SUN#2") // 매월 두 번째 일요일 밤 11시에 실행
이전의 수행이 종료된 시점을 기준으로 일정 시간이 지난 후 새로운 작업을 수행
이전의 수행이 시작된 시점을 기준으로 일정 시간이 지난 후 새로운 작업을 수행
fixedRate는 작업에 소요되는 수행 시간이 fixedRate에서 지정된 시간보다 길어진다면
두 수행이 겹쳐서 발생할 가능성이 있기 때문에 fixedRate로 스케줄링을 수행하게 된다면
해당 이슈가 발생할 수 있다는 가능성을 염두에 두고 스케줄링을 해야한다.