spring的Quartz定时器

时间:2022-01-04 23:27:23

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>


也可以是这样

 <bean name="aTaskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">

<property name="jobDetail" ref="aTaskMethodInvoking" />

<property name="startDelay" value="0"></property>
<property name="repeatInterval" value="1000" />

</bean>


4.在调度中注册定时器

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