quartz
spring
spring-task
タイミングタスク
Notes
Springタイミングタスクのいくつかの実装
最近、初期の分析など、いくつかのタイミングタスクをプロジェクト開発中に実行する必要があります。毎日朝この機会に、スケジュールされたタスクを実装するためのいくつかの方法を整理しました。プロジェクトでは Spring フレームワークを使用しているため、
Spring フレームワークと併せて紹介します。
1.分類
実装テクノロジーの観点から分類すると、現在 3 つの主要なテクノロジー (または 3 つの製品) があります:
Java 独自の java.util.Timer クラス。このクラスを使用すると、 java.util.TimerTask タスクをスケジュールできます。この方法を使用すると、指定した時間ではなく、特定の頻度でプログラムを実行できます。一般的にはあまり使われないので、この記事では詳しく紹介しません。
Quartz を使用します。これは、プログラムを指定した時間または頻度で実行できるようにする、比較的強力なスケジューラーです。構成は少し複雑なので、後で詳しく紹介します。
Spring 3.0 以降に付属するタスクは軽量の Quartz とみなすことができ、後で紹介する Quartz よりもはるかに簡単に使用できます。
ジョブクラスの継承方法に関しては、次の 2 つのカテゴリに分類できます。
ジョブクラスは特定のジョブクラスの基本クラスから継承する必要があります。例: Quartz は org.springframework.scheduling.quartz から継承する必要があります。 .QuartzJobBean; java .util.Timer は java.util.TimerTask から継承する必要があります。
ジョブ クラスは通常の Java クラスであり、基本クラスから継承する必要はありません。
注: すべてのクラスは共通クラスであり、事前に特別に処理する必要がないため、個人的には 2 番目の方法を使用することをお勧めします。
タスクスケジューリングのトリガータイミングから、ジョブに使用されるトリガーは主に以下の2種類があります:
指定時間ごとに1回トリガー、Quartzでの対応するトリガーはorgです。 .springframework.scheduling.quartz.SimpleTriggerBean
指定された時間ごとに 1 回トリガーされます。Quartz の対応するスケジューラーは次のとおりです。 org.springframework.scheduling.quartz.CronTriggerBean
注: すべてのタスクが使用できるわけではありません。たとえば、java.util.TimerTask タスクは最初のタスクのみを使用できます。 Quartz と Spring タスクは両方とも、これら 2 つのトリガー条件をサポートできます。
Ⅱ。使い方
QuartzやSpringタスクなど、各タスクスケジューリングツールの使い方を詳しく紹介します。
Quartz
最初のタイプのジョブ クラスは、特定の基本クラス org.springframework.scheduling.quartz.QuartzJobBean を継承します。
ステップ 1: ジョブ クラスを定義する
Java コード
import org.quartz.JobExecutionException;
import org.springframe work.s scheduling.quartz.QuartzJobBean ;
public class Job1 extends QuartzJobBean {
private int timeout;
private static int i = 0;
// スケジュール設定はタイムアウト時間後に開始されます
int timeout) {
this.timeout = タイムアウト
}
/**
* スケジュールされる特定のタスク
*/
@Override
protected voidexecuteInternal(JobExecutionContext context)
throws JobExecutionException {
システムが終了しました。 .println( "スケジュールされたタスクが実行されています...");
}
}
ステップ 2: Spring 構成ファイルでジョブ クラス JobDetailBean を構成します
Xml コード
<マップ>
説明: org.springframework.scheduling .quartz.JobDetailBean には 2 つの属性があります。jobClass 属性は Java コードで定義したタスク クラスであり、jobDataAsMap 属性はタスク クラスに注入する必要がある属性値です。
ステップ 3: ジョブ スケジューリングのトリガー方法 (トリガー) を構成する
Quartz には 2 つのジョブ トリガーがあります。
org.springframework.scheduling .quartz.CronTriggerBean 最初の SimpleTriggerBean は、30 分に 1 回の実行など、特定の頻度でのタスクの呼び出しのみをサポートします。 設定方法は以下の通りです: Xml コード
th 2 種類の CronTriggerBean は、毎日 12:00 など、指定した時刻に 1 回実行することをサポートします。
設定方法は以下の通りです。
Xmlコード
org.springframework.scheduling .quartz.CronTriggerBean
最初の SimpleTriggerBean は、30 分に 1 回の実行など、特定の頻度でのタスクの呼び出しのみをサポートします。
設定方法は以下の通りです:
Xmlコード
2 番目の CronTriggerBean は、指定された時間に 1 回の実行をサポートします。 1日1回12:00に実行されるなど。
設定方法は以下の通りです:
Xmlコード
xmlns :task="http://www.springframework.org/schema/task" . 。 。 。 。 。 xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> 第三ステップ: Spring 構成ファイル Xml コード これで設定は完了です。とても簡単ですね。 2 番目: アノテーション フォームを使用する タスク クラスを作成するたびに XML ファイルで設定する必要はないかもしれません。このアノテーションの定義を見てみましょう。ソース ファイル内: Java コード @Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented fixedDelay: 公式ドキュメントの説明: 前のタスクの完了時間から間隔を測定する間隔ベースのトリガー。時間単位の値は、前のタスクの完了から開始までの間隔を意味します。次のタスク、単位はミリ秒です。 fixedRate: 公式ドキュメントの説明: 間隔は、前のタスクの開始時刻から、つまり、前のタスクの開始からミリ秒単位で測定される間隔ベースのトリガーです。次のタスクの開始間隔 (ミリ秒)。 それでは、設定してみましょう。 ステップ 1: pojo を書く Java コード import org.springframework.scheduling.annotation.Scheduled; @Component("taskJob") public class TaskJob { @Scheduled(cron = "0 0 3 * * ?") public void job1() { System.out.println("タスク進行中...") } } ステップ 2: タスク関連の設定を追加します: Xml コード 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" /schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http ://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd http://www.springframework.org/schema/ tx http://www.springframework.org/schema/tx/spring -tx-3.0.xsd /spring-task-3.0.xsd" default-lazy-init="false" > -> <タスク:アノテーション駆動型スケジューラ="qbScheduler" mode="proxy"/> 注: 理論的には、構成文 もちろん、Spring タスクにはまだ多くのパラメータがあります。詳細については、xsd ドキュメント http://www.springframework を参照してください。 org/schema/task/spring-task-3.0.xsd。 付録: cronExpression の構成手順、具体的な使用法およびパラメータについては、Baidu google フィールド 許可される値 許可される特殊文字 秒 0 ~ 59 、 - * / ポイント 0-59 、 - * / 時間 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" 毎朝 10:15 にトリガーされます2005 年 「0 * 14 * * ?」 毎日午後 2 時から 2 時 59 分まで 1 分ごとにトリガーされます 「0 0/5 14 * * ?」 毎日午後 2 時から 2 時まで: 5 分ごとにトリガーされます55 分終了時の分 「0 0/5 14,18 * * ?」 毎日午後 2 時から 2 時 55 分と午後 6 時から 6 時 55 分の 2 つの時間帯で 5 分ごとにトリガー 「0 0-5 14 * * ?」 毎日 14:00 から 14:05 まで毎分トリガーします 「0 10,44 14 ? 3 WED」 3 月の毎週水曜日 14:10 にトリガーします14:44 「0 15 10? * MON-FRI」毎週月曜日、火曜日、水曜日、木曜日、金曜日の 10:15 にトリガー その他 いくつかのメソッドに関連する記事Java タイマーの場合は、PHP 中国語 Web サイトに注意してください。