spring에서 특정한 시간에 등록된 작업을 자동으로 실행할 때 사용
beans 설정
http://www.springframework.org/schema/task
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:quartz="http://www.springframework.org/schema/quartz"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/quartz http://www.springframework.org/schema/quartz/spring-quartz.xsd">
spring-context의 org.springframework.scheduling.concurrent 패키지 안에 있는
ThreadPoolTaskScheduler 클래스를 scheduler라는 이름의 Bean으로 등록
<task:scheduler id="scheduler" pool-size="3"/>
사용할 클래스를 빈으로 등록
<bean id="schedulingJob" class="com.example.project.scheduling.SchedulingJob" />
scheduling 설정
<task:scheduled-tasks scheduler="scheduler"> <!-- scheduled job list -->
<task:scheduled ref="schedulingJob" method="executeJob1" cron="* * * * * ?"/>
<task:scheduled ref="schedulingJob" method="executeJob2" cron="* * * * * ?"/>
</task:scheduled-tasks>
cron = "* * * * * ?"
기본적으로 6개의 필드
초 / 분 / 시 / 일 / 월 / 요일
ex)
cron = "0 * * * * ?"
-> 1분마다 실행(0초가 되는 순간 실행)
cron = "0 0 */4 * * ?"
-> 매 4시간 간격으로 실행
cron = "0 0 5 * * SUN"
-> 일요일 05시에만 실행 (SUN:0 or 7, MON:1, TUE:2, WED:3, THU:4, FRI:5, SAT:6)
cron = "0 5/10 * * * ?"
-> 5에 첫번째 작업 시작 (5, 15, 25, 35, 45, 55) 실행
beans 설정
http://www.springframework.org/schema/quartz
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:quartz="http://www.springframework.org/schema/quartz"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/quartz http://www.springframework.org/schema/quartz/spring-quartz.xsd">
라이브러리 의존성 추가
implementation 'org.quartz-scheduler:quartz:2.3.2'
사용할 클래스를 빈으로 등록
<bean id="schedulingJob" class="com.example.project.scheduling.SchedulingJob" />
MethodInvokingJobDetailFactoryBean을 사용하여 JobDetail Bean 등록
<bean id="job1Detail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="schedulingJob"/>
<property name="targetMethod" value="executeJob1"/>
</bean>
<bean id="job2Detail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="schedulingJob"/>
<property name="targetMethod" value="executeJob2"/>
</bean>
Cron Trigger Bean 등록
<bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="job1Detail"/>
<property name="cronExpression" value="* * * * * ?"/>
</bean>
<bean id="trigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="job2Detail"/>
<property name="cronExpression" value="* * * * * ?"/>
</bean>
Quartz Scheduler 설정
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="trigger1"/>
<ref bean="trigger2"/>
</list>
</property>
</bean>
task cron 식보다 디테일한 설정이 가능
범위 지정이 가능
ex)
cron = "00* 0-30/5 * * ?"
-> 0분부터 30분까지 5분 간격으로 실행
cron = "0 0 10 * * MON-FRI"
-> 월-금 10시마다 실행