JAVAにおけるSpringタイマーの2つの実装方法

高洛峰
リリース: 2016-12-16 13:16:58
オリジナル
1283 人が閲覧しました

現在、一般的な 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 つのトリガーを提供します。

SimpleTriggerBean は、scheduledTimerTasks に似ています。

<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本(二流)。

Start timer

<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 プロパティはトリガーのセットを受け入れます。

さて、この記事はこれで終わりです。かなり良い内容ですが、いくつか欠点もあります。貴重なご意見をお聞かせください。



JAVA での Spring タイマーの 2 つの実装方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート