码迷,mamicode.com
首页 > 编程语言 > 详细

使用spring配置quartz定时器

时间:2016-08-23 13:22:37      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

quartz是石英钟的意思,所以用这个名字来做定时器的框架名称再适合不过。一年前做项目的时候有用过这个框架,当时没有整理,今天刚好新的商城系统也需要定时器。想要达到的效果是:每天的固定时间,比如凌晨3:00的时候定时扫描数据库,查看所有的订单,看看这些订单是否超过5天还未付款,如果未付款,则将这部分未付款的订单的状态置为取消(或者说放入垃圾回收站)。功能很清晰简单,以下是具体的做法。

第一步,导包。因为是第三方的框架,自然要导包,导入quartz的jar包,这里导入的是quartz-2.2.1.jar这个版本,将其放入到web-inf下的lib中。

第二步,配置。

项目采用的是SSH框架,最好新建一个spring的配置文件,我给他起名为:quartzSping.xml。如图所示。

技术分享

记得将这个配置文件引入到主的配置文件applicationContext.xml中,如图所示。仅需在applicationContext.cml的最后加入这样一句话就可以。

技术分享

接下来就是配置quartzSpring.xml这个文件了。

1.首先,我们先新建一个java类,这个类中的代码将作为定时器触发时所要执行的代码。新建一个RealOrderQuart.java类。如下所示。


package wonyen.yipin.action;

import wonyen.yipin.service.RealOrderService;

public class RealOrderQuartz {
    /**
     * 订单定时扫描,判断是否满足取消条件
     */
    private RealOrderService realOrderService;
    
    public RealOrderService getRealOrderService() {
        return realOrderService;
    }

    public void setRealOrderService(RealOrderService realOrderService) {
        this.realOrderService = realOrderService;
    }

    public void orderQuartz() {
        //此处编写定时器触发时候执行的代码

    }

}

2.先配置刚才新建的那个java类,如下所示。

    <!-- 订单扫描类 -->
    <bean id="realOrderQuartz" class="wonyen.yipin.action.RealOrderQuartz"
        scope="prototype">
        <property name="commodityClassService" ref="commodityClassService" />
        <property name="searchService" ref="searchService" />
    </bean>

3.配置quartz的任务具体信息,即MethodInvokingJobDetailFactoryBean,任务详情的工厂。

    <!-- quartz任务详情工厂 -->
    <bean id="realOrderQuartzJobDetail"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="realOrderQuartz" />
        </property>
        <property name="targetMethod">  <!-- 要执行的方法名称 -->
            <value>orderQuartz</value>
        </property>
    </bean>

4.配置定时规则触发器,配置定时触发规则有两种不同的实现类,一种是org.springframework.scheduling.quartz.SimpleTriggerBean,另外一种是org.springframework.scheduling.quartz.CronTriggerBean。区别在于前者只能做简单的定时,比如每隔多久触发一次,而后者可以使用cron表达式来自定义定时的规则。这边我采用后者。配置了从周一到周日,每天的3点20触发。cron表达式的具体用法可自行百度。这边的jobDetail属性填写上一步配置的任务详情,即realOrderQuartzJobDetail

    <!-- 配置定时规则,Cron表达式 ,调度触发器 -->
    <bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"
        id="cronRealOrderTrigger">
        <property name="jobDetail" ref="realOrderQuartzJobDetail">
        </property>
        <!-- 秒 分 时 日 月 星期 -->
        <property name="cronExpression" value="0 20 03 ? * 1,2,3,4,5,6,7">
        </property>
    </bean>

5.配置调度工厂,在调度工厂中,我们调度相应的触发器。这里就是调度上一步配置的cronRealOrderTrigger触发器。

    <!-- 调度工厂 -->
    <bean id="realOrderQuartzScheduler"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronRealOrderTrigger" />
            </list>
        </property>
    </bean>

这样,我们就配置成功了。

 

使用spring配置quartz定时器

标签:

原文地址:http://www.cnblogs.com/roy-blog/p/5798839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!