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个参数互斥时,也可以写?表示不设置