‘스케줄러 사용을 위한 크론 표현식(Cron Expression) 정리‘에 이어서 작성하는 글입니다. 크론 표현식의 문법을 확인하려면 이전 글을 참고하시면 됩니다. 이번 글에서는 스프링 배치에 사용하는 크론 표현식의 예시를 설명합니다.
목차
스프링 배치 스케줄을 위한 크론 표현식
스프링 배치(Spring Batch)는 일괄처리 작업을 위해서 작성되고, 그 배치 프로그램을 특정 시간 또는 특정 주기로 수행하는 스케줄링을 위해서 스프링 쿼츠(Spring Quartz)를 사용하게 됩니다. 이 때 스케줄링을 위해서 크론 표현식을 사용하게 됩니다.
<!-- Job --> <beans:bean id="job" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <beans:property name="targetObject" ref="ScheduleJob" /> <beans:property name="targetMethod" value="doAction" /> <beans:property name="concurrent" value="false" /> </beans:bean> <!-- Trigger --> <beans:bean id="jobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <beans:property name="jobDetail" ref="job" /> <beans:property name="cronExpression" value="0 15 6 * * *" /> </beans:bean> <!-- Scheduler --> <beans:bean id="jobScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <beans:property name="triggers"> <beans:list> <beans:ref bean="jobTrigger" /> </beans:list> </beans:property> </beans:bean>
스프링 쿼츠를 설정하는 간단한 XML 예시 입니다. Trigger의 cronExpression 항목에 수행 스케줄을 작성합니다.
@Scheduled(cron = "0 15 6 * * *")
다른 방법은 @Scheduled 어노테이션을 사용하는 방법이 있습니다. @Scheduled는 어노테이션에 파라메터로 “cron = * * * * * *” 처럼 크론 표현식을 작성하여 사용합니다.
크론 표현식 예시
크론 표현식의 예시 입니다. 예시를 참고해서 사용해야 하는 스케줄의 크론 표현식을 작성하면 됩니다.
매 시간 20분, 30분에 수행
* 20,30 * * * *
콤마를 사용하여 20분, 30분을 지정 합니다.
30초 마다 수행
0/30 * * * * *
초(Second)를 의미하는 첫 번째 항목에 초기값과 증분값을 설정하여 30초 마다 수행하도록 작성합니다.
5분 마다 수행
* 0/5 * * * *
0/5는 초기값이 0으로 0분 부터 5분 마다 수행을 합니다. 즉 정각, 5분, 10분, 15분 … 에 수행됩니다. 6분, 11분, 16분, 21분 순서로 수행하려 한다면 1/5로 작성하면 됩니다.
1시간 마다 수행
* * 0/1 * * *
매일 0시에서 6시 사이에 30분마다 수행
* 0/30 0-6 * * *
하이픈을 사용하여 0-6으로 0시부터 6시 사이만 수행하도록 합니다.
매 월 1일 6시 30분에 수행
* 30 6 1 * *
매 월 15일 6시 30분에 수행
* 30 6 15 * *
매 월 마지막 날 6시 30분에 수행
* 30 6 L * *
매 월의 마지막 날은 30일, 31일 그리고 2월은 28일이나 다른 날짜가 되기도 합니다. 그래서 값의 마지막 값을 표현하는 L을 사용하여 마지막 날을 지정하여 수행합니다.
매 주 월요일 12시에 수행
* 0 12 * * 2 또는 * 0 12 * * MON
매 주 평일 12시에 수행
* 0 12 ? * 2-6 또는 * 0 12 ? * MON-FRI
특정 년도 첫 날에 수행
* * * 1 1 * 2023
2023년 1월 1일에 한 번 수행되는 스케줄입니다. 생략 가능한 년도(Year) 필드를 사용하면 됩니다.