Spring Quartz 实现任务自动调度
1. 背景
在系统间的接口实现中,经常需要系统自动获取另外一个系统的数据或者向另外一个系统书写数据;有些大系统为了更好地解决网络瓶颈问题,把一些不是很重要,数据量比较大的数据放到少人访问的时候系统自动执行其中的任务。这就需要自动调度任务执行,目前比较好的有Spring 与 Quartz结合起来使用的任务调度技术。本文详细讲述了一个自动任务调度的实例。
2. 环境
将以下Jar包导进工程:commons-logging-1.0.4.jar、quartz.jar和spring.jar,并加入classpath。
3. beans.xml配置文件的配置,如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 需要被调度执行的对象 -->
<bean id="myQuarz" class="com.lanp.MyQuarz" />
<!--定义定时执行"com.lanp.MyQuarz" 这个bean中的sayHello()方法-->
<bean id="myTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="myQuarz" />
</property>
<property name="targetMethod">
<value>sayHello</value>
</property>
</bean>
<!--触发器的bean的设置,这里我们定义了要触发的jobDetail是myTask,即触发器去触发哪个bean..并且我们还定义了触发的时间:每天10:26am-->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="myTask" />
</property>
<property name="cronExpression">
<!-- 关键在配置此表达式 10:26-->
<value>0 26 10 * * ?</value>
</property>
</bean>
<!-- 管理触发器的总设置,管理我们的触发器列表,可以在bean的list中放置多个触发器。 -->
<bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="myTrigger" />
</list>
</property>
</bean>
</beans>
4. 需要被调度的类MyQuarz,源代码如下:
package com.lanp;
/**
* 需要被调度执行的类
* @author LanP
* @since 2011-11-5 9:43
* @version V1.0
*/
public class MyQuarz {
public void sayHello() {
System.out.println("Hello,I am runing...");
}
}
5. 测试类TestMyQuarz,源代码如下:
package com.lanp;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 测试MyQuarz调度
* @author LanP
* @since 2011-11-5 9:45
* @version V1.0
*/
public class TestMyQuarz {
public static void main(String[] args) {
// 只要加载配置文件就可以
System.out.println("*****调度容器开始******");
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
System.out.println("*****调度执行完毕******");
}
}
OK,TKS!