ホームページ  >  記事  >  Java  >  Java の Spring フレームワークでの Quartz の構成に関するチュートリアル

Java の Spring フレームワークでの Quartz の構成に関するチュートリアル

高洛峰
高洛峰オリジナル
2017-01-23 10:58:311479ブラウズ

Spring で Quartz を設定するプロセス:

1. JAR パッケージをインポートします

quartz に必要な JAR パッケージは既に Spring に含まれており、その場所は次のディレクトリの libquartz の下のquartz-all-1.6.1.jar です。 spring が解凍されたら、

プロジェクトの WEB-INF/lib にコピーするだけです。


2. Spring の起動時に Quartz 設定ファイルをロードするように web.xml を設定します

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <!-- spring -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:application-*.xml</param-value>
  </context-param>
  
  <!-- spring监听 -->
  
  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
</web-app>

3. Quartz 設定ファイルを作成します: application-quartz.xml 実際、これらの設定は他の Spring 設定ファイルに書き込むことができます

<?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:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  
  <!-- 任务实体 -->
  <bean id="testTaskBean" class="com.jp.task.TestTask" />
  
  <!-- 定时更新政策任务方法 -->
  <bean id="testTaskTimerMethod"
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="testTaskBean" />
    <!-- targetMethod 配置定时执行的方法名 -->
    <property name="targetMethod" value="executeAction" />
    <property name="concurrent" value="false" />
  </bean>
  
  <!-- 定时更新政策触发器 -->
  <bean id="testTaskTrigger"
    class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="syncPolicyTaskTimerMethod" />
        <!-- 每个3分钟的第0秒执行 -->
    <property name="cronExpression" value="0 0/3 * * * ?" />
  </bean>
  
  <!-- 订制任务列表 -->
  <bean id="scheduler"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
      <list>
        <ref bean="testTaskTrigger" />
      </list>
    </property>
  </bean>
</beans>

4. タスクを実行するための JAVA クラス TestTask を作成します

package com.jp.task;
   
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
  
  
public class TestTask extends QuartzJobBean{
    
  Logger log = Logger.getLogger( PolicyServiceTest.class );
      
  public void executeAction(){
    log.info("Hello quartz");
  }
  
  @Override
  protected void executeInternal(JobExecutionContext arg0)
      throws JobExecutionException {
      
  }
  
}

5. すべての作業の準備ができたら、実行します。基本的に、エラーが報告されました。 NoSuchMethod などのエラーが発生します。

これは、commons-collections.jar のバージョンが低すぎることが原因です。 commons-collections-3.2.jar 以降が必要です。

この時点で、プロジェクト内に commons-collections-3.2.jar が見つかります。 何が起こっているのでしょうか? 再度検索すると、休止状態の commons-collections-2.1.1.jar が見つかります。

commons-collections-2.1.1.jar を削除するだけです。

PS: cronExpression - Cron 式の説明

時間

月の日付

週の日付

年 (オプションフィールド)

特殊文字

Cron トリガー コンパイラーが利用する次のような一連の特殊文字:

バックスラッシュ (/) 文字は増分値を表します。たとえば、秒フィールドの「5/15」は、5 秒目から始まる 15 秒ごとを意味します。

疑問符 (?) 文字と文​​字 L 文字は、月の日と曜日のフィールドでのみ使用できます。疑問符は、このフィールドに特定の値が含まれていないことを示します。したがって、月内の日を指定する場合は、曜日フィールドに「?」を挿入して、曜日の値が重要ではないことを示すことができます。 L という文字は、last の短縮形です。月の末日に実行をスケジュールするには、これを「月の日付」フィールドに入力します。曜日フィールドでは、「L」が単独で存在する場合は「7」と等しくなります。それ以外の場合は、月内の曜日の最後のインスタンスを表します。したがって、「0L」は、月の最終日曜日に実行されるようにスケジュールされていることを意味します。

「月日」フィールドの文字 (W) は、指定された値に最も近い平日に実行をスケジュールします。月の最初の営業日に実行をスケジュールするには、月の日付フィールドに「1W」を入力します。

ポンド (#) 文字は、特定の月の特定の営業日インスタンスを指定します。タスクを月の第 2 月曜日にスケジュールするには、曜日フィールドに「MON#2」を入力します。

アスタリスク (*) 文字はワイルドカード文字で、フィールドが任意の値を受け入れることができることを示します。

フィールドに使用できる特殊文字:
秒 0 ~ 59、 - * /
分 0 ~ 59、 - * /
時間 0 ~ 23、 - * /
日付 1 ~ 31、 - * / L W C
月 1 ? -12 または JAN-12 月、 - * /
平日 1-7 または SUN-SAT、 - * ? / L C #
年 (オプション) 空白のまま、1970-2099、 - * /
式の意味
"0 0 12* * 毎日午前 10 時 15 分にトリガーされます
「0 15 10 * * ? 2005」 2005 年の毎日午前 10 時 15 分にトリガーされます
「0 * 14 * * ?」 午後 2 時から午後 2 時 59 分まで 1 分ごとにトリガーされます毎日
「0 0/5 14 * * ? 毎日午後 2 時から午後 2 時 55 分まで 5 分ごとにトリガーします
「0 0/5 14,18 * * ?」 午後 2 時から午後 2 時まで 5 分ごとにトリガーします:毎日午後 55 時、午後 6 時から午後 6 時 55 分まで 5 分ごとにトリガーします
「0 0-5 14 * * ?」毎日午後 2 時から午後 2 時 05 分まで 1 分ごとにトリガーします
「0 10,44 14 ? 3 WED」は次の時間にトリガーします毎年 3 月の水曜日の午後 2 時 10 分と午後 2 時 44 分
「0 15 10 ? * MON-FRI」は月曜日から金曜日の午前 10 時 15 分にトリガーされます
「0 15 10 15 * ?」は毎月 15 時にトリガーされます:毎月末日の午前 15 時
「0 15 10 L * ?」 毎月末日の午前 10 時 15 分にトリガーされます
「0 15 10 ? * 6L」 最後の金曜日の午前 10 時 15 分にトリガーされます各月の
「0 15 10 ? * 6L 2002-2005」 2002 年から 2005 年までの各月の最終金曜日の午前 10 時 15 分にトリガーされます
「0 15 10 ? * 6#3」 の午前 10 時 15 分にトリガーされます毎月第 3 金曜日
毎日午前 6 時

0 6 * * *

2 時間ごと

0 */2 * * *

午後 11 時から午前 8 時までの間、2 時間ごと

0 23- 7/ 2, 8 * * *


毎月4日と毎週月曜日から水曜日の午前11時

0 11 4 * 1-3

1月1日午前4時

0 4 1 1 *


詳しくはこちらJava の Spring フレームワークでの Quartz の構成に関するチュートリアルと関連記事については、PHP の中国語 Web サイトに注目してください。

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