現在、一般的な Spring タイマー構成には、Java の Timer クラスと OpenSymphony の Quartz の 2 つがあります。
1.Javaタイマーのタイミング
まず、java.util.TimerTaskクラスを継承して、Spring
で定義されたrunメソッドimport java.util.TimerTask; public class EmailReportTask extends TimerTask{ @Override public void run() { ... } }
<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <property name="timerTask" ref="reportTimerTask" /> <property name="period"> <value>86400000value> property> bean>
<bean class="org.springframework.scheduling.timer.TimerFactoryBean"> <property name="scheduledTimerTasks"> <list><ref bean="scheduleReportTask"/>list> property> bean>
<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <property name="timerTask" ref="reportTimerTask" /> <property name="period"> <value>86400000value> property> <property name="delay"> <value>3600000value> property> bean>
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class EmailReportJob extends QuartzJobBean{ protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { ... } }
<bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>EmailReportJobvalue> property> <property name="jobDataAsMap"> <map> <entry key="courseService"> <ref bean="courseService"/> entry> map> property> bean>
Quartz の org.quartz.Trigger クラスは、Quartz ジョブを実行するタイミングと頻度を記述します。 Spring は、SimpleTriggerBean と CronTriggerBean の 2 つのトリガーを提供します。
<bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="reprotJob" /> <property name="startDelay"> <value>360000value> property> <property name="repeatInterval"> <value>86400000value> property> bean>
各要素には、値 (6 など)、間隔 (9-12)、リスト (9、11、13)、またはワイルドカード (*) が表示されます。 2 つの要素 4 と 6 は相互に排他的であるため、設定したくないフィールドを示すには疑問符 (?) を設定し、値の組み合わせが繰り返し回数を示す場合は「/」を設定する必要があります (10/6 は繰り返しを意味します) 10秒ごとに6本(二流)。
<bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="reprotJob" /> <property name="cronExpression"> <value>0 0 6 * * ?value> property> bean>