Spring-mvc集成Quartz实现定时器的效果
前言
最近在学习如何实现后台定时处理订单过期的效果。这里使用Quartz框架去做定时器的操作。
Quartz
使用Quartz作为定时器,它的原理是通过设置一个触发器和一个触发后所需要执行的方法(job类)。设定一个触发的时间,当然还有其他可以设置的参数,这里的触发器在官方文档中分为两种。这里我只用到了一个规定触发时间的:CronTrigger。
配置
这里我做的定时器是一个全局定时器,即在服务器启动的时候就会开始工作。配置的内容在xml中,当然也可以通过java代码配置,java代码的配置可以百度w3cschool的Quartz文档。
创建一个定时工作执行的方法实体:
@DisallowConcurrentExecution
public class ResWholeTimer{
public void executeCancel() throws JobExecutionException{System.out.println("取消订单"+new DateTime().toString());
}
}在spring配置文件中配置:
<!-- 配置取消订单job类 -->
<bean id="handleResWhole" class="com.eooker.lafite.modules.veh.entity.ResWholeTimer"/>
<!-- 配置触发执行的类型以及所要执行的方法 -->
<bean id="cancel"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="handleResWhole" /> </property> <property name="targetMethod"> <!-- 要执行的方法名称 --> <value>executeCancel</value> </property>
</bean>
<!-- 配置取消订单触发器trigger -->
<bean id="cancelTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean "><property name="jobDetail" ref="cancel"></property> <property name="cronExpression" value="* * 2 * * ?"></property>
</bean>
<!-- 配置调度工厂 -->
<bean id="SpringJobSchedulerFactoryBean"class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <!-- 取消订单的两个触发器 --> <ref bean="cancelTrigger"/> <!--<ref bean="remindTrigger" />--> </list> </property>
</bean>
注:所配置的触发器和job类他们之间通过id来建立连接。
最后
通过这个定时器可以简单实现一些定时操作,注意这样配置的话是会在服务器启动的时候定时器就会生效,而触发的时间是按照你所设置的参数决定的(上述的value=" 2 ?"),这个配置可以查阅官方文档。如果是使用java进行配置的话可以参考一下文章:
Quartz+SpringMVC实现web定时管理任务(java)