前言

最近在学习如何实现后台定时处理订单过期的效果。这里使用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)

标签: Spring-mvc集成Quartz

添加新评论