zoukankan      html  css  js  c++  java
  • 使用spring配置quartz定时器

    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="realOrderService" ref="realOrderService" />
        </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>

    这样,我们就配置成功了。运行程序,到指定的时间,就可以触发定时器中的代码了。

     

  • 相关阅读:
    Verilog非阻塞赋值的仿真/综合问题 (Nonblocking Assignments in Verilog Synthesis)上
    异步FIFO结构及FPGA设计 跨时钟域设计
    FPGA管脚分配需要考虑的因素
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 上篇)
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 下篇)
    中国通信简史 (下)
    谈谈德国大学的电子专业
    中国通信简史 (上)
    Verilog学习笔记
    Verilog非阻塞赋值的仿真/综合问题(Nonblocking Assignments in Verilog Synthesis) 下
  • 原文地址:https://www.cnblogs.com/roy-blog/p/5798839.html
Copyright © 2011-2022 走看看