• 项目中Quartz定时器的使用


      在日常生活中,我们难免会在一些地方使用到一些定时提醒任务,定时的业务逻辑操作。下面我给大家介绍一下简单思路 

    Quartz 是
      一个开源的任务调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。

    使用步骤:

      1、需要定时执行的任务:

    public class QuartzSrvBean {
        private Logger logger = LoggerFactory.getLogger(QuartzSrvBean.class);
    
        private PreOrderMonitorService preOrderMonitorService;
    
        public void setPreOrderMonitorService(
                PreOrderMonitorService preOrderMonitorService) {
            this.preOrderMonitorService = preOrderMonitorService;
        }
        /**
         * 定时执行任务.....
         */
        public void exec() {
            //记录定时任务日志
            logger.info("xxxx定时任务开始执行-------------");
            boolean isComplete = preOrderMonitorService.execUpdateTask(null);
            logger.info("xxxx定时任务isComplete:" + isComplete);
        }
    
    }

      2、导入依赖 

       <dependency>
          <groupId>org.quartz-scheduler</groupId>
          <artifactId>quartz</artifactId>
          <version>2.2.3</version>
        </dependency>

      3、配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd">
    
    
    //增加作业类
    一、工作的 bean
    <bean id="quartzSrvBean" class="com.xxx.yyy.common.QuartzSrvBean">
        <property name="preOrderMonitorService" ref="preOrderMonitorService"></property>
    </bean>
    
    //执行作业的method(job)
    <bean id="job2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="quartzSrvBean"></property>
      //需要定时执行的方法 <property name="targetMethod" value="exec"></property> </bean> //工作的trigger //简易 <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <property name="jobDetail" ref="job2" /> <property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 --> <property name="repeatInterval" value="60000" /><!-- 每60秒调度一次 --> </bean> //石英表达式Corn <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="job2" /> <property name="cronExpression" value="0 0/1 14 * * ?" /><!-- 从14点开始直到14点59分每隔1分钟运行一次 --> </bean> //配置调度中心 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> </bean> </beans>

    //解释:
    (1)、Job:表示一个任务(工作),要执行的具体内容。
    (2)、JobDetail:表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容,另外JobDetail 还包含了这个任务调度的方案和策略。
    (3)、Trigger:代表一个调度参数的配置,什么时候去调。
    (4)、Scheduler:代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与JobDetail 组合,就可以被 Scheduler 容器调度了

      4、此时任务就会根据我们的trigger配置的定时规则,有规律的执行。

    石英表达式的小技巧:http://cron.qqe2.com/

      5、如何监控 Quartz 的 job 执行状态:运行中,暂停中,等待中? 
    通过往表(新建一个操作日志表)里插入日志的形式:
        1)运行中:通过 JobListener 监听器来实现运行时更改表信息。
        2)暂停中:调用 scheduler.pauseTrigger()方法时,更改表中 job 信息。
        3)等待中:新添加的 job 默认给其等待中的状态,也是更改表中的 job 信息 但是上面这种形式的麻烦之处是得频繁的往表里插入数据。
  • 相关阅读:
    SVN使用教程总结
    SVN
    js中设置元素class的三种方法小结
    Javascript 删除tr 元素
    SQL Server执行计划的理解
    java多线程知识点汇总(四)多线程知识点脉络图
    hibernate将connection放进threadlocal里实现数据库连接池
    数据库连接池中是将connection放进threadlocal里的
    java jdbc深入理解(connection与threadlocal与数据库连接池和事务实)
    java项目怎样添加jar包依赖?
  • 原文地址:https://www.cnblogs.com/guanyuehao0107/p/11962712.html
Copyright © 2020-2023  润新知