Springタスクスケジューリング実戦のQuartz Simple Trigger


この記事のアドレス:http://blog.csdn.net/kongxx/article/details/6751300
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秒おきに実行されるのが見えます.