Java 独自の java.util.Timer クラス。このクラスを使用すると、java.util.TimerTask タスクをスケジュールできます。この方法を使用すると、指定した時間ではなく、特定の頻度でプログラムを実行できます。
Quartz を使用します。Quartz は、指定した時間または頻度でプログラムを実行できるようにする比較的強力なスケジューラーです。設定は少し複雑です。
Spring 3.0 以降に付属するタスクは軽量の Quartz とみなすことができ、Quartz よりもはるかに簡単に使用できます。
ジョブ クラスは、Quartz などの特定のジョブ クラスの基本クラスから継承する必要があり、継承する必要があります。 org.springframework.scheduling .quartz.QuartzJobBean から; java.util.Timer は java.util.TimerTask から継承する必要があります。
ジョブ クラスは通常の Java クラスであり、基本クラスから継承する必要はありません。
注: すべてのクラスは共通クラスであり、事前に特別に処理する必要がないため、個人的には 2 番目の方法を使用することをお勧めします。
指定時間ごとにトリガー、Quartzで対応 トリガーは: org .springframework.scheduling.quartz.SimpleTriggerBean
は、指定された時間ごとに 1 回トリガーされます。 Quartz の対応するスケジューラーは次のとおりです。 org.springframework.scheduling.quartz.CronTriggerBean
注: 各タスクがこれら 2 つのトリガーを使用できるわけではありません。たとえば、java.util.TimerTask タスクは最初のタスクのみを使用できます。 Quartz と Spring タスクは両方とも、これら 2 つのトリガー条件をサポートできます。
QuartzやSpringタスクなど、各タスクスケジューリングツールの使い方を詳しく紹介します。
ステップ 1: ジョブ クラスを定義する
import org.quartz.JobExecutionContext
import またはg.quartz.JobExecutionException
import org.springframework.scheduling.quartz.QuartzJobBean;
public class Job1 extends QuartzJobBean {
プライベート静的int i =
//スケジューリングファクトリーがインスタンス化された後、タイムアウト時間後にスケジューリングが開始されます
public
this.timeout = タイムアウト }
* スケジュールされる特定のタスク
*/
@オーバーライド
protected
voidexecuteInternal (JobExecutionContext コンテキスト)この行 JobExecutionException {
System.out.println("スケジュールされたタスクが実行中です...")
beanname="job1"class="org.springframework.scheduling.quartz.JobDetailBean"> プロパティ
value="com.gy.Job1" /> property
&g マップ
entry
value="0" /& gt;
地図プロパティ
説明: org.springframework.scheduling.quartz.JobDetailBean には 2 つの属性があります。jobClass 属性は Java コードで定義するタスク クラスであり、jobDataAsMap 属性はタスク クラスに注入する必要がある属性値です。
Quartz には、org.springframework.scheduling.quartz.SimpleTriggerBeanorg.springframework.scheduling という 2 つのジョブ トリガーがあります。
最初の SimpleTriggerBean は、30 分ごとに実行するなど、特定の頻度でのタスクの呼び出しのみをサポートします。
Xmlコード
bean id="simpleTrigger"
class="org.springframework.scheduling .quartz.SimpleTriggerBean"
>プロパティname="jobDetail" ref="job1"
< ;property name="startDelay" value="0" /> property
value="2000" /> bean>
2 番目の CronTriggerBean は、毎日 12:00 に 1 回実行するなど、指定した時間に 1 回実行することをサポートします。 設定方法は以下の通りです: Xmlコード beanid="cronTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
プロパティ name="jobDetail" ref="job1"
プロパティname="cronExpression" value="0 0 12 * * ? />
豆
ステップ 4: スケジューリングファクトリーを構成する
Xml コード
class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
プロパティname="トリガー">
リスト参照
リスト>
プロパティbean
説明: このパラメータは、以前に構成されたトリガーの名前を指定します。
2 番目に、ジョブ クラスは特定の基本クラスを継承しません。
これら 2 つのクラスは、Spring でサポートされる 2 つのタイプにそれぞれ対応します。タスクのスケジューリングを実装するには、前述したように Java に付属するタイマー タスク メソッドと Quartz メソッドを使用します。ここでは、MethodInvokingJobDetailFactoryBean の使用法についてのみ書きます。このクラスを使用する利点は、タスク クラスがクラスから継承する必要がなく、通常の pojo であることです。
ステップ 1: タスク クラスを作成する
Java コードpublic
class Job2 {
システム.out.println("QuartzJobBean モードを継承しません - スケジューリング中です...");
}
これは通常のクラスであることがわかります。方法があります。
ステップ 2: ジョブ クラスを構成するbeanid="job2"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&g t;
プロパティ name="targetObject">
bean class="com.gy.Job2" />
property>
property name="concurrent" value="false" /& gt;
bean>次の手順は方法 1 と同じです。完全を期すために、それらの手順も掲載します。 ステップ 3: ジョブ スケジューリングのトリガー方法 (トリガー) を構成する Quartz には、org.springframework.scheduling.quartz.SimpleTriggerBeanorg.springframework.scheduling という 2 つのジョブ トリガーがあります。
最初の SimpleTriggerBean は、30 分ごとに実行するなど、特定の頻度でのタスクの呼び出しのみをサポートします。Xmlコード
"simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerビーン」
> ;property name ="startDelay" value=
"0"property name="repeatInterval" value="2000" />
bean> 2 番目の CronTriggerBean は、毎日 12:00 など、指定された時間に 1 回実行することをサポートします。 設定方法は以下の通りです:
beanid="cronTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean"> プロパティ name="jobDetail" ref= > < ; value="0 0 12 * * ? /> 豆 ステップ 4: スケジューリングファクトリーを構成する bean プロパティname="トリガー"> リスト> "cronTrigger" リスト> プロパティ> 説明: このパラメータは、以前に構成されたトリガーの名前を指定します。 ステップ 5: アプリケーションを起動し、プロジェクトを Tomcat または他のコンテナーにデプロイするだけです。 この時点で、Spring の Quartz の基本構成が導入されました。もちろん、使用する前に、対応する Spring パッケージと Quartz パッケージをインポートする必要があります。 Spring-Task 前のセクションでは、Spring での Quartz の使用法を紹介しました。この記事では、Spring 3.0 以降の自社開発のスケジュールされたタスク ツールである Spring タスクを紹介します。これは、軽量の Quartz と比較することができ、使いやすいです。非常に簡単です。Spring 関連のパッケージを除いて追加のパッケージは必要ありません。これらの 2 つの方法を以下に紹介します。 、つまり通常のpojoを以下のように書きます: Javaコード import org.springframework.stereotype.Service; @Service public void job1() { } 「http://www.springframework.org/schema/task」 "http://www.springframework.org/schema/task "> タスク:スケジュール " job1" タスク:スケジュールされたタスク public public System.out.println("タスク進行中...") } Xml コード xml version="1.0" encoding="UTF-8"?> beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context= "http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" " default-lazy-init="false"> context:annotation-config /> > context:component-scan base-package="com.gy.mytask" /> > タスク:アノテーション駆動型 scheduler="qbScheduler" mode="proxy"/> task:scheduler id="qbScheduler" pool-size="10"/> 注: 理論的には、構成文 もちろん、Spring タスクにはまだ多くのパラメータがあります。詳細については、xsd ドキュメントを参照してください。 付録: cronExpression の設定手順、具体的な使用法およびパラメータについては、Baidu google フィールド 許可される値 許可される特殊文字 秒 0-59 , - * / 0 9 , - * / 時間 0-23 , - * / 日付 1-31 , - * ? / L W C 月 1-12 または 1 月-12 月 , - * / 平日 1 ~ 7 または SUN ~ SAT 、 - * ? / L C # 年 (オプション) 空白のまま、1970 ~ 2099 、 - * / - 範囲 * ワイルドカード ?そのフィールドを設定する必要はありません 以下にいくつかの例を示します CRON 式 意味 「0 0 12 * * ?」 毎日正午にトリガーされます 「0 15 10 ? * *」 毎朝 10:15 にトリガーされます 「0 15 10 * * ? 毎朝 10:15 にトリガーされます 」 「0 15 10 * * ? *」 毎朝 10 : 15 トリガー "0 15 10 * * ? 2005" 2005 年の毎朝 10:15 にトリガー "0 * 14 * * ?" 午後 2 時から午後 2 時 59 分まで毎分トリガー "0 0/5 14 * * ?" 毎日午後 2 時から午後 2:55 まで 5 分ごとにトリガー "0 0/5 14,18 *** ?"午後2時〜2時55分と午後6時〜6時55分の2つの時間帯で 「0 0-5 14 * * ?」 毎日14:00〜14:05の毎分 1つのトリガー 「0 10,44 14 ? 3 WED」3月の毎週水曜日14:10と14:44にトリガー 「0 15 10 ? * MON-FRI」毎週月曜日、火曜日、水曜日の10:15にトリガー、木曜と金曜
x mlns :タスク=
以上がSpring スケジュールされたタスクの使用手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。