ホームページ  >  記事  >  Java  >  Javaタイマーのいくつかの方法

Javaタイマーのいくつかの方法

高洛峰
高洛峰オリジナル
2016-12-16 13:19:061438ブラウズ

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コード

}

}

これは通常のクラスであり、メソッドがあることがわかります。

ステップ 2: ジョブ クラスの構成

Xml コード

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

< プロパティname="concurrent" value="false" />

説明: このステップは重要なステップです。MethodInvokingJobDetailFactoryBean を宣言します。 , 重要な属性が 2 つあります。targetObject はタスク クラスを指定し、targetMethod は実行するメソッドを指定します。次の手順は方法 1 と同じです。完全を期すために、それらの手順も掲載します。

ステップ 3: ジョブ スケジューリングのトリガー方法 (トリガー) を構成する

Quartz には 2 つのジョブ トリガーがあります。

org.springframework.scheduling .quartz.CronTriggerBean

最初の SimpleTriggerBean は、30 分に 1 回の実行など、特定の頻度でのタスクの呼び出しのみをサポートします。

設定方法は以下の通りです:

Xmlコード

;property name ="repeatInterval" value="2000" />

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 コード

で特定のタスクを設定します。 "/> つまり、タスク クラスです。method で指定されたメソッドは、実行する必要があるメソッド cron です。具体的な記述方法については、前回の記事の付録を参照してください。

言うまでもなく、この構成はスプリング スキャンのアノテーションに使用されます。

これで設定は完了です。とても簡単ですね。

2 番目: アノテーション フォームを使用する

タスク クラスを作成するたびに XML ファイルで設定する必要はないかもしれません。このアノテーションの定義を見てみましょう。ソース ファイル内:

Java コード

@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @Interfaceスケジュール{

パブリックアブストラクトロングデレイ(); : cron 式を指定します

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 サイトに注意してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。