Springタスクスケジューリング実戦のQuartz Simple Trigger
この記事のアドレス:http://blog.csdn.net/kongxx/article/details/6751300
Springでのタスクスケジューリングの統合は、JDKが独自のTimerクラスとTimerTaskクラスを使用して単純なタスクスケジューリングを実現するほか、エンタープライズクラスのオープンソースジョブスケジューリングフレームワークQuartzを使用して実現することもできます.以下の例を示します.
1.まずタスククラスであり、このクラスはインタフェースを実装していない.runメソッドがこのtaskを実行するために使用される.コードは以下の通りである.
3.2 JobDetailBeanクラスのbeanを定義し、これはQuartzのJobDetailに適応するためであり、ここではname、group、descriptionなどの情報を定義することができ、これらの情報は主に他のジョブと区別するために使用される.もう1つのjobClassプロパティは、そのJobクラスのインスタンスを使用することを定義しています.ここでは、2番目のステップで作成したMyJobクラスを使用します.最後にjobDataAsMapという属性を定義し、この属性はQuartzが提供したパラメータを伝達するために使用されるMapの集合であり、これらの集合の中のクラスはspringによってターゲットJobクラスに自動的に注入される.
3.3フリップフロップクラスを作成します.ここではQuartzが提供するSimple Triggerを使用しています.Springでは、SimpleTriggerBeanを使用してマッピングを行います.主に最初の実行の遅延時間を定義しています.繰り返し実行するたびの間隔は、もちろん最も主要なボディのJobクラスの例もあります.
3.4最後にSchedulerFactoryBeanのbeanを定義し、そのトリガを具体的にスケジュールすることを定義した.
4.最後に、上のコードと構成をテストするためにテストクラスを書きます.
Springでのタスクスケジューリングの統合は、JDKが独自のTimerクラスとTimerTaskクラスを使用して単純なタスクスケジューリングを実現するほか、エンタープライズクラスのオープンソースジョブスケジューリングフレームワークQuartzを使用して実現することもできます.以下の例を示します.
1.まずタスククラスであり、このクラスはインタフェースを実装していない.runメソッドがこのtaskを実行するために使用される.コードは以下の通りである.
package org.garbagecan.springstudy.schedule.quartz;
public class MyTask {
private String name;
public void run() {
System.out.println("Run task: " + name + ".");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
.springのQuartzJobBeanクラスを継承する必要があるJobクラス.現在のクラスはTaskクラスのオブジェクトインスタンスを含むQuartzのJobクラスであり、JobがスケジューリングされるたびにexecuteInternalメソッドが実行されます.コードは次のとおりです.package org.garbagecan.springstudy.schedule.quartz;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class MyJob extends QuartzJobBean {
private MyTask myTask;
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
myTask.run();
}
public MyTask getMyTask() {
return myTask;
}
public void setMyTask(MyTask myTask) {
this.myTask = myTask;
}
}
3.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
default-lazy-init="true">
<bean id="timerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
<property name="triggers">
<list>
<ref local="simpleTrigger"/>
</list>
</property>
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="myJob" />
<property name="startDelay" value="0" />
<property name="repeatInterval" value="10000" />
</bean>
<bean id="myJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="name" value="myJob"/>
<property name="group" value="myGroup"/>
<property name="description" value="myJob"/>
<property name="jobClass" value="org.garbagecan.springstudy.schedule.quartz.MyJob"/>
<property name="jobDataAsMap">
<map>
<entry key="myTask" value-ref="myTask" />
</map>
</property>
</bean>
<bean id="myTask" class="org.garbagecan.springstudy.schedule.quartz.MyTask">
<property name="name" value="my task"/>
</bean>
</beans>
3.1まず、Taskクラスを定義する必要があります.具体的なタスクロジックはこのクラスに書くことができます.3.2 JobDetailBeanクラスのbeanを定義し、これはQuartzのJobDetailに適応するためであり、ここではname、group、descriptionなどの情報を定義することができ、これらの情報は主に他のジョブと区別するために使用される.もう1つのjobClassプロパティは、そのJobクラスのインスタンスを使用することを定義しています.ここでは、2番目のステップで作成したMyJobクラスを使用します.最後にjobDataAsMapという属性を定義し、この属性はQuartzが提供したパラメータを伝達するために使用されるMapの集合であり、これらの集合の中のクラスはspringによってターゲットJobクラスに自動的に注入される.
3.3フリップフロップクラスを作成します.ここではQuartzが提供するSimple Triggerを使用しています.Springでは、SimpleTriggerBeanを使用してマッピングを行います.主に最初の実行の遅延時間を定義しています.繰り返し実行するたびの間隔は、もちろん最も主要なボディのJobクラスの例もあります.
3.4最後にSchedulerFactoryBeanのbeanを定義し、そのトリガを具体的にスケジュールすることを定義した.
4.最後に、上のコードと構成をテストするためにテストクラスを書きます.
package org.garbagecan.springstudy.schedule.quartz;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) throws Exception {
new ClassPathXmlApplicationContext("/org/garbagecan/springstudy/schedule/quartz/spring.xml");
}
}
Testクラスを実行すると、my taskというjobが起動し、10秒おきに実行されるのが見えます.