ホームページ >Java >&#&チュートリアル >JAVAにおけるSpringタイマーの2つの実装方法
現在、一般的な 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() { ... } }を実装します...Springタイマーを設定します
<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <property name="timerTask" ref="reportTimerTask" /> <property name="period"> <value>86400000value> property> bean>timerTask属性は、Scheduled TimerTask にどれを実行するかを指示します。 86400000 は 24 時間を表しますSpring タイマーの開始Spring の TimerFactoryBean はスケジュールされたタスクの開始を担当します
<bean class="org.springframework.scheduling.timer.TimerFactoryBean"> <property name="scheduledTimerTasks"> <list><ref bean="scheduleReportTask"/>list> property> bean>scheduledTimerTasks は、開始する必要があるタイマー タスクのリストを表示します。 遅延属性を設定することで開始を遅らせることができます
<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>このタスクを24時間ごとに実行することのみを規定でき、特定の時間に開始することはできません2.クォーツタイマーまずはQuartzJobBeanクラスを継承してexecuteInternalメソッドを実装します
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 { ... } }はSpringで定義されています
<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>ここではEmailReportJob Beanを直接宣言するのではなく、JobDetailBeanを宣言します。これがクォーツの特徴です。 JobDetailBean は Quartz の org.quartz.JobDetail のサブクラスであり、jobClass 属性を通じて Job オブジェクトを設定する必要があります。 Quartz の JobDetail の使用に関するもう 1 つの特別な点は、EmailReportJob の courseService 属性が間接的に設定されることです。 JobDetail の jobDataAsMap プロパティは、jobClass に設定されたさまざまなプロパティを含む Map を受け入れます。 JobDetailBean がインスタンス化されると、EmailReportJob の courseService プロパティに courseService 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>startDelay も 1 時間遅れて開始されます CronTriggerBean はジョブの正確な実行時間を指定します 属性 cronExpression を指定します。いつトリガーするかを伝えます。最も謎に満ちているのは cron 式です。Cron は通常、Linux システムでスケジュールされたタスクを担当します。 cron 式には、スペースで区切られた少なくとも 6 つ (おそらく 7 つ) の時間要素が含まれます。左から右へ: 1. 秒 2. 分 3. 時間 4. 日付 (1 ~ 31) 5. 月 (1 ~ 12 または 1 月 ~ 12 月) 6. 曜日 (1 ~ 7 またはSUN-SAT) 7. 年 (1970-2099)
各要素には、値 (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>triggers プロパティはトリガーのセットを受け入れます。 さて、この記事はこれで終わりです。かなり良い内容ですが、いくつか欠点もあります。貴重なご意見をお聞かせください。