ホームページ > Java > &#&チュートリアル > Spring スケジュールされたタスクの使用手順

Spring スケジュールされたタスクの使用手順

零下一度
リリース: 2017-06-30 10:37:12
オリジナル
1413 人が閲覧しました

1.分類

  • 実装テクノロジーの観点から見ると、現在 3 つの主要なテクノロジーがあります:

  1. Java 独自の java.util.Timer クラス。このクラスを使用すると、java.util.TimerTask タスクをスケジュールできます。この方法を使用すると、指定した時間ではなく、特定の頻度でプログラムを実行できます。

  2. Quartz を使用します。Quartz は、指定した時間または頻度でプログラムを実行できるようにする比較的強力なスケジューラーです。設定は少し複雑です。

  3. Spring 3.0 以降に付属するタスクは軽量の Quartz とみなすことができ、Quartz よりもはるかに簡単に使用できます。

  • ジョブクラスの継承方法に関しては、次の 2 つのカテゴリに分類できます:

  1. ジョブ クラスは、Quartz などの特定のジョブ クラスの基本クラスから継承する必要があり、継承する必要があります。 org.springframework.scheduling .quartz.QuartzJobBean から; java.util.Timer は java.util.TimerTask から継承する必要があります。

  2. ジョブ クラスは通常の Java クラスであり、基本クラスから継承する必要はありません。

注: すべてのクラスは共通クラスであり、事前に特別に処理する必要がないため、個人的には 2 番目の方法を使用することをお勧めします。

  • タスクスケジューリングのトリガータイミングから、ジョブに使用されるトリガーは主に以下の2種類があります:
  1. 指定時間ごとにトリガー、Quartzで対応 トリガーは: org .springframework.scheduling.quartz.SimpleTriggerBean

  2. は、指定された時間ごとに 1 回トリガーされます。 Quartz の対応するスケジューラーは次のとおりです。 org.springframework.scheduling.quartz.CronTriggerBean

注: 各タスクがこれら 2 つのトリガーを使用できるわけではありません。たとえば、java.util.TimerTask タスクは最初のタスクのみを使用できます。 Quartz と Spring タスクは両方とも、これら 2 つのトリガー条件をサポートできます。

2.使用方法

QuartzやSpringタスクなど、各タスクスケジューリングツールの使い方を詳しく紹介します。

Quartz

最初のタイプのジョブ クラスは、特定の基本クラス org.springframework.scheduling.quartz.QuartzJobBean を継承します。

ステップ 1: ジョブ クラスを定義する

Java コード Spring スケジュールされたタスクの使用手順
  1. import org.quartz.JobExecutionContext

  2. import またはg.quartz.JobExecutionException

  3. import org.springframework.scheduling.quartz.QuartzJobBean;

  4. public class Job1 extends QuartzJobBean {

  5. private
  6. int timeout;

  7. プライベート静的int i =

  8. //スケジューリングファクトリーがインスタンス化された後、タイムアウト時間後にスケジューリングが開始されます

    public
  9. void setTimeout(
  10. int timeout) {

  11. this.timeout = タイムアウト }

  12. /**
  13. * スケジュールされる特定のタスク

  14. */

  15. @オーバーライド

  16. protected

    voidexecuteInternal (JobExecutionContext コンテキスト)
  17. この行 JobExecutionException {
  18. System.out.println("スケジュールされたタスクが実行中です...")

  19. }

  20. ステップ 2: Spring 構成ファイルでジョブ クラス JobDetailBean

  21. Xml コードを構成します
    1. beanname="job1"class="org.springframework.scheduling.quartz.JobDetailBean"> プロパティ

    2. name=
    3. "jobClass"

      value="com.gy.Job1" /> property

    4. name=
    5. "jobDataAsMap"

      &g マップ

    6. >
    7. entry

    8. key=
    9. "timeout"

      value="0" /& gt;

      地図
    10. >
    11. プロパティ
    12. >
    13. 説明: org.springframework.scheduling.quartz.JobDetailBean には 2 つの属性があります。jobClass 属性は Java コードで定義するタスク クラスであり、jobDataAsMap 属性はタスク クラスに注入する必要がある属性値です。

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

      Quartz には、org.springframework.scheduling.quartz.SimpleTriggerBeanorg.springframework.scheduling という 2 つのジョブ トリガーがあります。

      最初の SimpleTriggerBean は、30 分ごとに実行するなど、特定の頻度でのタスクの呼び出しのみをサポートします。
    設定方法は以下の通りです:

Xmlコード

bean id=

"simpleTrigger"

class=

"org.springframework.scheduling .quartz.SimpleTriggerBean"

>
Spring スケジュールされたタスクの使用手順
  1. プロパティname="jobDetail" ref="job1"

  2. < ;property name="startDelay" value="0" /> property

  3. name=
  4. "repeatInterval"

    value="2000" /> bean>

  5. 2 番目の CronTriggerBean は、毎日 12:00 に 1 回実行するなど、指定した時間に 1 回実行することをサポートします。 設定方法は以下の通りです: Xmlコード

    1. beanid="cronTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">

  6. プロパティ name="jobDetail" ref="job1"

  7. >

  8. < ;

    プロパティname="cronExpression" value="0 0 12 * * ? />

  9. cronExpression 式の構文については、付録を参照してください。

ステップ 4: スケジューリングファクトリーを構成する

Xml コード
Spring スケジュールされたタスクの使用手順
    bean

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

    プロパティ

    name="トリガー">

    リスト
  1. >

    参照

  2. bean=
  3. "cronTrigger"

    リスト>

    プロパティ
  4. >
  5. bean
  6. >
  7. 説明: このパラメータは、以前に構成されたトリガーの名前を指定します。

  8. ステップ 5: アプリケーションを起動し、プロジェクトを Tomcat または他のコンテナーにデプロイするだけです。

    2 番目に、ジョブ クラスは特定の基本クラスを継承しません。

  9. Spring は 2 つのクラスのおかげでこのメソッドをサポートできます:
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

これら 2 つのクラスは、Spring でサポートされる 2 つのタイプにそれぞれ対応します。タスクのスケジューリングを実装するには、前述したように Java に付属するタイマー タスク メソッドと Quartz メソッドを使用します。ここでは、MethodInvokingJobDetailFactoryBean の使用法についてのみ書きます。このクラスを使用する利点は、タスク クラスがクラスから継承する必要がなく、通常の pojo であることです。

ステップ 1: タスク クラスを作成する

Java コード

public

class Job2 {

public Spring スケジュールされたタスクの使用手順void () {
  1. システム.out.println("QuartzJobBean モードを継承しません - スケジューリング中です...");

  2. }

    }

  3. これは通常のクラスであることがわかります。方法があります。

    ステップ 2: ジョブ クラスを構成する
  4. Xml コード
    1. beanid="job2"

    2. class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&g t; ​​

    3. プロパティ name="targetObject">

    4. bean class="com.gy.Job2" />

    5. property>

    6. property name="concurrent" value="false" /& gt;

    7. bean>次の手順は方法 1 と同じです。完全を期すために、それらの手順も掲載します。 ステップ 3: ジョブ スケジューリングのトリガー方法 (トリガー) を構成する Quartz には、org.springframework.scheduling.quartz.SimpleTriggerBeanorg.springframework.scheduling という 2 つのジョブ トリガーがあります。

      最初の SimpleTriggerBean は、30 分ごとに実行するなど、特定の頻度でのタスクの呼び出しのみをサポートします。
    8. 設定方法は以下の通りです:

      Xmlコード

bean id=

"simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerビーン」

> ;

プロパティ Spring スケジュールされたタスクの使用手順name=
"jobDetail"
ref=
    "job2"
  1. property name ="startDelay" value=

    "0"
  2. />
  3. property name="repeatInterval" value="2000" />

  4. bean> 2 番目の CronTriggerBean は、毎日 12:00 など、指定された時間に 1 回実行することをサポートします。 設定方法は以下の通りです:

  5. Xmlコード
    1. beanid="cronTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean"> プロパティ name="jobDetail" ref=

      "job2"
    2. > < ;

      プロパティ
    3. name=
    4. "cronExpression"

      value="0 0 12 * * ? />

    5. 上記の2つのスケジュール方法は、実際の状況に応じて選択できます。

      ステップ 4: スケジューリングファクトリーを構成する

      Xml コード

    bean

    class=
    "org.springframework.scheduling.quartz.SchedulerFactoryBean"
    >
    Spring スケジュールされたタスクの使用手順
    1. プロパティname="トリガー">

    2. リスト>

      参照
    3. bean=

      "cronTrigger"

    4. リスト> プロパティ>

    5. bean
    6. >

      説明: このパラメータは、以前に構成されたトリガーの名前を指定します。
    7. ステップ 5: アプリケーションを起動し、プロジェクトを Tomcat または他のコンテナーにデプロイするだけです。 この時点で、Spring の Quartz の基本構成が導入されました。もちろん、使用する前に、対応する Spring パッケージと Quartz パッケージをインポートする必要があります。

      実際のところ、Quartz の構成は非常に複雑であることがわかります。Quartz は実際には重量級のツールなので、単純にスケジュールされたいくつかの単純なタスクを実行したい場合は、もっと単純なツールはありますか? !
    8. 以下の Spring タスクの紹介をご覧ください。

      Spring-Task 前のセクションでは、Spring での Quartz の使用法を紹介しました。この記事では、Spring 3.0 以降の自社開発のスケジュールされたタスク ツールである Spring タスクを紹介します。これは、軽量の Quartz と比較することができ、使いやすいです。非常に簡単です。Spring 関連のパッケージを除いて追加のパッケージは必要ありません。これらの 2 つの方法を以下に紹介します。

      最初の方法: 設定ファイルメソッド
    最初のステップ: ジョブクラス

    、つまり通常のpojoを以下のように書きます:

    Javaコード

    1. import org.springframework.stereotype.Service;

    2. @Service

    3. public void job1() {

    4. System.out.println("タスクインprogress...");
    5. }

      }
    6. ステップ 2: Spring 構成ファイルのヘッダーに名前を追加する スペースと説明

    x mlns :タスク=

    「http://www.springframework.org/schema/task」

    ​​
    . 。 。 。 。 。 Spring スケジュールされたタスクの使用手順
    1. xsi:schemaLocation=

      "http://www.springframework.org/schema/task ">

    2. ステップ 3: Spring 構成ファイルに特定のタスクを設定する
    3. タスク:スケジュール

      ref=
    4. "taskJob"
    5. method=

      " job1"

      cron=
    6. "0 * * * * ?"
    7. />

      タスク:スケジュールされたタスク

      >

    Spring スケジュールされたタスクの使用手順
    context:component-scan
      base-package=
    1. "

      />

    2. 説明: ref パラメータ 指定されたタスククラス、指定されたメソッドは実行する必要があるメソッド、 cron および cronExpression 式 詳細については、ここでは紹介しません。前回の記事の付録。 言うまでもなく、この構成はスプリング スキャンのアノテーションに使用されます。 これで設定は完了です。とても簡単ですね。 2 番目: アノテーション フォームを使用する タスク クラスを作成するたびに XML ファイルで設定する必要はないかもしれません。 @Scheduled アノテーションの定義を見てみましょう。ソースファイル: Java コード

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

      2. @Retention(RetentionPolicy.RUNTIME)

      3. @Document編

      4. public @interface Scheduled

      5. {

      6. public abstract String cron();

      7. public

        abstract
      8. long fixedDelay() ;
      9. このアノテーションには 3 つのメソッドまたはパラメータがあり、それぞれ表されていることがわかります。 意味:

        cron: cron 式を指定します。
      10. fixedDelay: 公式ドキュメントの説明: 間隔は前のタスクの完了時間から測定され、時間単位の値はミリ秒単位で測定されます。つまり、前のタスクの完了から次のタスクまでの間隔です。次のタスクの開始 (ミリ秒単位)。

        fixedRate: 公式ドキュメントの説明: 間隔ベースのトリガーで、時間単位の値は前のタスクの開始時刻から測定されます。つまり、前のタスクの開始から次のタスクまでの間隔です。次のタスクの開始。単位はミリ秒です。 次に設定してみましょう。

      11. ステップ 1: pojo を書く
      Java コード

    import org.springframework.scheduling.annotation.Scheduled

    im port org.springframe作業.ステレオタイプ.コンポーネント

    Spring スケジュールされたタスクの使用手順
    @Component("taskJob")
    1. public
    2. class TaskJob {
    3. Scheduled(cron =
    4. "0 0 3 * * ?")

    5. public

      void job1() {
    6. System.out.println("タスク進行中...") }

    7. }

      ステップ2: タスク関連の構成を追加します:
    8. Xml コード

      1. xml version="1.0" encoding="UTF-8"?>  

      2. beans xmlns="http://www.springframework.org/schema/beans"

      3. xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

      4. xmlns:context= "http://www.springframework.org/schema/context"

      5. xmlns:tx="http://www.springframework.org/schema/tx"

      6. xmlns:task="http://www.springframework.org/schema/task"

      7. xsi:schemaLocation="

      8. "

      9. default-lazy-init="false">  

      10. context:annotation-config />  

      11. >  

      12. context:component-scan base-package="com.gy.mytask" />  

      13. >  

      14. タスク:アノテーション駆動型 scheduler="qbScheduler" mode="proxy"/>  

      15. 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にトリガー、木曜と金曜

以上がSpring スケジュールされたタスクの使用手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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