项目中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 信息 但是上面这种形式的麻烦之处是得频繁的往表里插入数据。

猜你喜欢

转载自www.cnblogs.com/guanyuehao0107/p/11962712.html