spring还是以整合已有的框架为主,对于定时器(也有人叫触发器)分为两类,Java的Timer和第三方OpenSymphony的Quartz,这里讨论Quartz,因为它对时间的设置比较灵活。
在spring中,可以继承QuartzJobBean,也可以不做任何继承,当然写法也不一样,这里用的非继承的写法。
定时器的注册过程:1.创建bean,2.声明bean为一个定时器,3.设置任务时间,4.在调度中注册定时器
先看看spring用到的一些类:
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean:声明定时器用的
org.springframework.scheduling.quartz.CronTriggerBean:设置时间
org.springframework.scheduling.quartz.SchedulerFactoryBean:总调度
先随便写个类
public class A{
public void test(){
//具体业务
}
}
1.创建bean
<bean name="aTask"class="A">
</bean>
2.声明bean为一个定时器
<bean name="aTaskMethodInvoking" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="aTask" />
<!-- 启动定时器时执行的方法 -->
<property name="targetMethod" value="test" />
<!-- 非并发定时器 -->
<property name="concurrent" value="false" />
</bean>
3.设置任务时间
<bean name="aTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="aTaskMethodInvoking" />
<property name="cronExpression">
<!-- 格式到网上查,这里是每分钟执行一次 -->
<value>0 0/1 * * * ?</value>
</property>
</bean>
4.在调度中注册定时器
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="aTaskTrigger" />
</list>
</property>
</bean>