• 使用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>

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

     

  • 相关阅读:
    5G NR:MAC 子层
    无线接口架构:PHY
    NR 演进之路: NR设计
    What is 5G Massive MIMO?
    CQI MCS 调度关系
    ubuntu离线安装mysql
    如何在Linux系统下的IntelliJ IDEA 2018.3.5下载与安装以及激活教程
    Java调用CMD命令
    文件和byte数组之间相互转换
    Java中两个或多个byte数组合并及int类型转数组
  • 原文地址:https://www.cnblogs.com/roy-blog/p/5798839.html
Copyright © 2020-2023  润新知