Spring 3 + Quartz 1.8.6スケジューラの例
このチュートリアルでは、SpringをQuartzスケジューラフレームワークと統合する方法を説明します。 Springには、Quartzをサポートする多くの便利なクラスがあり、クラスをQuartz APIにデカップリングします。
使用されるツール:
-
Spring 3.1.2.RELEASE
-
クォーツ1.8.6
-
Eclipse 4.2
-
Maven 3
-
なぜQuartz 2ではないのですか?** +現在、Spring 3はまだQuartz 2 APIをサポートしていません。このhttps://jira.springsource.org/browse/SPR-8581[SPR-8581バグレポート]を参照してください。バグ修正がリリースされたら、この記事を再度更新します。
-
1.プロジェクトの依存関係
Spring 3とQuartz 1.8.6を統合するには、以下の依存関係が必要です。
ファイル:pom.xml
... <依存関係> <! - Spring 3の依存関係 - > <依存関係> <groupId> org.springframework </groupId> <artifactId> spring-core </artifactId> <version> 3.1.2.RELEASE </version> </dependency> <! - Spring context-support.jarのQuartzJobBean - > <dependency> <groupId> org.springframework </groupId> <artifactId>スプリングコンテキストサポート</artifactId> <version> 3.1.2.RELEASE </version> </dependency> <! - Spring + Quartz need transaction - > <dependency> <groupId> org.springframework </groupId> <artifactId> spring-tx </artifactId> <version> 3.1.2.RELEASE </version> </dependency > <! - Quartz framework - > <dependency> <groupId> org.quartz-scheduler </groupId> <artifactId>クォーツ</artifactId> <version> 1.8.6 </version> </dependency> </dependencies> ...
2.スケジューラタスク
通常のJavaクラスを作成します。これはQuartzでスケジュールするクラスです。
ファイル:Run Task.java
package com.mkyong.common; public class RunMeTask { public void printMe() { System.out.println("Spring 3 + Quartz 1.8.6 ~"); } }
3. Quartz Scheduler Jobを宣言する
Springでは、Quartzジョブを次の2つの方法で宣言できます。
-
3.1 MethodInvokingJobDetailFactoryBean ** +これはシンプルなスケジューラーに適した、最も単純で直接的な方法です。
<bean id="runMeJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="runMeTask"/> <property name="targetMethod" value="printMe"/> </bean>
-
3.2 JobDetailBean ** + `QuartzJobBean`はより柔軟で複雑なスケジューラーに適しています。
Springの
QuartzJobBean`を拡張するクラスを作成し、
executeInternal() `メソッドでスケジュールするメソッドを定義し、setterメソッドを介してスケジューラータスク(RunMeTask)を渡す必要があります。
File:RunMeJob.java
package com.mkyong.common; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class RunMeJob extends QuartzJobBean { private RunMeTask runMeTask; public void setRunMeTask(RunMeTask runMeTask) { this.runMeTask = runMeTask; } protected void executeInternal(JobExecutionContext context) throws JobExecutionException { runMeTask.printMe(); } }
jobClass`と
jobDataAsMap`を介して実行するメソッドを介してターゲットクラスを設定します。
<bean name="runMeJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.mkyong.common.RunMeJob"/> <property name="jobDataAsMap"> <map> <entry key="runMeTask" value-ref="runMeTask"/> </map> </property> </bean>
4.トリガー
Quartzトリガーを設定して、スケジューラージョブをいつ実行するかを定義します。 2つのタイプのトリガがサポートされています。
-
4.1 SimpleTrigger ** +ジョブを実行する開始時刻、終了時刻、繰り返し間隔を設定できます。
<!-- Simple Trigger, run every 5 seconds --> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="runMeJob"/> <property name="repeatInterval" value="5000"/> <property name="startDelay" value="1000"/> </bean>
-
4.2 CronTrigger ** + Unixのcron式で、あなたの仕事を実行する日時を指定することができます。
<!-- Cron Trigger, run every 5 seconds --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="runMeJob"/> <property name="cronExpression" value="0/5 ** ** ** ** ?"/> </bean>
-
Note ** + Unixのcron式は非常に柔軟で強力ですが、以下のWebサイトで詳しく読むことができます:
5.スケジューラ工場
スケジューラーのファクトリーBeanを作成して、ジョブの詳細とトリガーを統合します。
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="runMeJob"/> </list> </property> <property name="triggers"> <list> <ref bean="simpleTrigger"/> </list> </property> </bean>
6. Spring Bean設定ファイル
完全なSpringのBean構成ファイル。
File:Spring-Quartz.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="runMeTask" class="com.mkyong.common.RunMeTask"/> <!-- Spring Quartz --> <bean name="runMeJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.mkyong.common.RunMeJob"/> <property name="jobDataAsMap"> <map> <entry key="runMeTask" value-ref="runMeTask"/> </map> </property> </bean> <!-- <bean id="runMeJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="runMeTask"/> <property name="targetMethod" value="printMe"/> </bean> --> <!-- Simple Trigger, run every 5 seconds --> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="runMeJob"/> <property name="repeatInterval" value="5000"/> <property name="startDelay" value="1000"/> </bean> <!-- Cron Trigger, run every 5 seconds --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="runMeJob"/> <property name="cronExpression" value="0/5 ** ** ** ** ?"/> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="runMeJob"/> </list> </property> <property name="triggers"> <list> <ref bean="simpleTrigger"/> </list> </property> </bean> </beans>
7.デモ
それを〜
package com.mkyong.common; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main( String[]args ) throws Exception { new ClassPathXmlApplicationContext("Spring-Quartz.xml"); } }
コンソールに出力します。
Jul 25, 2012 3:23:09 PM org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler INFO: Starting Quartz Scheduler now Spring 3 + Quartz 1.8.6 ~//run every 5 seconds Spring 3 + Quartz 1.8.6 ~
ソースコードをダウンロードする
ダウンロードする –
Spring3-Quartz-Example.zip
(25 KB)
参考文献
春のクォーツスケジューラ]。
Quartz Official Website
-
link://struts2/struts-2-spring-3-quartz-1-8-scheduler-example/[Struts
2 +スプリング3 +クォーツ1.8の例]