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 以降が必要です。
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 サイトに注目してください。