集成spring和quartz

quartz是个好东西,今天用的版本是quartz-1.7.3,最新的版本貌似是quartz-2.1.4

首先需要写一个工作类,继承自QuartzJobBean,这个类的作用类似于TimerTask
public class MyTimer extends QuartzJobBean {

	@Override
	protected void executeInternal(JobExecutionContext context)
			throws JobExecutionException {

		System.out.println("gogo");

	}

}

这里的executeInternal()就是会定时执行的方法

然后要写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.xsd">


	<bean id="myTimerJob" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="xxx.xxx.xxx.MyTimer" />
	</bean>


	<bean id="myTimerTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="myTimerJob" />
		<property name="cronExpression" value="1 * * * * ?" />
	</bean>


	<bean id="schedulerFactory"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="myTimerTrigger" />
			</list>
		</property>
	</bean>

</beans>

上面分别定义了3个bean,是嵌套的关系

首先schedulerFactory这个bean,类型是org.springframework.scheduling.quartz.SchedulerFactoryBean,是作为一个总的调度,放在triggers列表中的触发器,就会被触发

然后myTimerTrigger这个bean,类型是org.springframework.scheduling.quartz.CronTriggerBean,是为每个定时任务设置触发时间,这样的bean会有多个,与定时任务是一一对应的

最后myTimerJob这个bean,类型是org.springframework.scheduling.quartz.JobDetailBean,也就是实际的TimerTask,这样的bean也会有多个,与Trigger是一一对应的

此外,介绍一下cronExpression的配置方法

例子里面是这样的:
<property name="cronExpression" value="1 * * * * ?" />

这里配置了6个参数,实际上最多可以配7个,不过一般都是配6个

然后第1个的意思是秒,可以写0-59,也可以写*表示任意

第2个是分钟,和秒的配置一样

第3个是小时,可以写0-23,也可以用*表示任意

第4个是天,可以写1-31,可以用*表示任意,当与第6个参数互斥时,也可以写?表示不设置

第5个是月,可以是1-12,也可以写*

第6个是星期几,可以是1-7,也可以写*,当与第4个参数互斥时,也可以写?表示不设置

猜你喜欢

转载自kyfxbl.iteye.com/blog/1564133
今日推荐