You are on page 1of 2

크론 작업 스케줄링

대부분 애플리케이션의 경우 SimpleTriggerBean을 사용하여 완벽하게 스케줄링이 가능하다고 생각할 수 있으나 수


강등록 보고서를 이메일로 보내는 작업에 있어서는 충분하지 못하다. SimpleTriggerBean의 경우 SchdeduleTimerTask
와 마찬가지로 작업을 어떻게 실행할지 지정할 수 있을 뿐, 정확히 언제 실행할 지는 지정할 수 없다. 따라서 담당
자에게 매일 오전 6시에 수강등록 보고서를 전송해야 하는 작업에서는 SimpleTriggerBean을 사용할 수 없다.
CronTriggerBean는 작업을 실행하는 시점에 대해 좀더 정확한 제어를 가능하게 해준다. 만약 유닉스의 크론(cron)툴
을 알고 있다면 CronTriggerBean이 친숙할 것이다.
작업을 얼마나 자주 실행할 것인지를 지정하는 대신, CronTriggerBean을 사용화여 작업이 실행될 정확한 시간(또는
날짜)을 지정할 수 있다. 예를 들어 매일 오전 1시에 링크가 깨진 파일을 삭제하고 싶다면, 다음과 같이
CronTriggerBean을 선언하면 된다.

<!-- 스케쥴링 관련 프로세스 (링크깨진 파일 삭제)-->


<bean id="docLinkServiceDeleteFile"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="docLinkService" />
</property>
<property name="targetMethod">
<value>deleteFile</value>
</property>
</bean>

<bean id="cronFileDeleteTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">


<property name="jobDetail">
<ref bean="docLinkServiceDeleteFile" />
</property>
<property name="cronExpression">
<value>0 0 1 * * ?</value>
</property>
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="cronFileDeleteTrigger" />
</list>
</property>
</bean>

SimpleTriggerBean의 경우와 마찬가지로 jobDetail 특성은 스케줄링될 작업을 나타내며 docLinkServieDeleteFile 빈의


참조에 묶는다. cronExpression특성은 작업을 언제 시작할지를 지정한다. 만약 여러분이 크론에 익숙하지 않다면 이
특성이 마치 암호처럼 보일수도 있기 때문에, 이 특성에 대해 좀더 자세히 알아보자.
크론 표현식은 공백문자로 분리된, 적어도 6개(선택사항을 추가하면 7개)의 시간 요소를 갖는다. 표현식의 좌측에서
부터 우측으로 다름과 같은 요소들이 정의된다.

1. 초(0-59)
2. 분(0-59)
3. 시간(0-23)
4. 날짜(1-31)
5. 월(1-12 또는 JAN-DEC)
6. 요일(1-7 또는 SUN-SAT)
7. 연도(선택사항, 1970-2099)

이들 각 요소는 명시적인 값(예를 들어 6), 범위(에를 들어 9-12), 리스트(예를 들어 9, 11, 13), 와일드 카드(예들들어
*)등을 함께 사용할 수 있다. 날짜와 요일은 상호배타적이기 때문에, 물음표(?)를 사용하여 둘 중 하나를 설정하지 않
겠다는 표시를 해야 한다. 아래 표는 몇가지 크론 표현식들의 예제와 의미를 보여준다
표현식 의미
0 0 10, 14, 16 * * ? 매일 오전 10시, 오후 2시, 오후 4시에 실행
0 0, 15, 30, 45 * 1-10 * ? 매달 처음 10일 동안 15분 간격으로 실행
30 0 0 1 1 ? 2012 2012년 1월 1일 0시 0분 기준으로 30초 후에 실행
0 0 8-5 ? * MON-FRI 모든 근무일의 업무시간 동안 실행

You might also like