zoukankan      html  css  js  c++  java
  • quartz 定时器

    什么是Quartz

    Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。

    Quartz 核心组件

    • Scheduler:调度容器

    • Job:Job 接口类,即被调度的任务

      Job 是一个接口,只有一个方法 void execute(JobExecutionContext context),开发者实现接口来定义任务。JobExecutionContext 类提供了调度上下文的各种信息。Job 运行时的信息保存在 JobDataMap 实例中。

    • JobDetail:Job 的描述类,job执行时的依据此对象的信息反射实例化出Job的具体执行对象

      JobDetail绑定指定的Job,每次Scheduler调度执行一个Job的时候,首先会拿到对应的Job,然后创建该Job实例,再去执行Job中的execute()的内容,任务执行结束后,关联的Job对象实例会被释放,且会被JVM GC清除。

    • Trigger:触发器,包括SimpleTrigger和CronTigger

      SimpleTrigger:当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择。

      CronTrigger:CronTrigger功能非常强大,是基于日历的作业调度,而SimpleTrigger是精准指定间隔,所以相比SimpleTrigger,CroTrigger更加常用。

      Cron 表达式格式:[秒] [分] [小时] [日] [月] [周] [年]

    • JobStore:存储作业和调度期间的状态

    • Calendar:指定排除的时间点

    Quartz Demo

    利用Quartz 搭建一个简单的demo

    1. 引入依赖jar 包

      <dependency>
      	<groupId>org.quartz-scheduler</groupId>
      	<artifactId>quartz</artifactId>
      	<version>2.2.3</version>
      </dependency>
      
    2. 配置quartz的任务

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
             default-lazy-init="false">
      
      
          <bean id="AcceptTaskListener" class="com.XXX.base.task.AcceptTaskListener"/>
          <bean id="saveAccept" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
              <property name="targetObject">
                  <ref bean="AcceptTaskListener"/>
              </property>
              <property name="targetMethod">
                  <value>saveAcceptInfo</value>
              </property>
          </bean>
          <bean id="saveAccpet_cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
              <property name="jobDetail" ref="saveAccept"/>
              <property name="cronExpression">
                  <value>0 30 01,07,13 * * ?</value>
              </property>
          </bean>
      
          <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
              <property name="triggers">
                  <list>
                      <ref bean="statusSynchronize_cronTrigger"/>
                  </list>
              </property>
          </bean>
      </beans>
      
    3. 执行任务的具体内容

      public class AcceptTaskListener {
      	public void saveAcceptInfo() {
      		****具体任务逻辑****
      	}
      }
      
  • 相关阅读:
    【CF1009F】Dominant Indices(长链剖分优化DP)
    长链剖分学习笔记
    【洛谷5294】[HNOI2019] 序列(主席树维护单调栈+二分)
    【洛谷5286】[HNOI2019] 鱼(计算几何)
    【洛谷5292】[HNOI2019] 校园旅行(思维DP)
    【UVA1309】Sudoku(DLX)
    初学DLX
    【LOJ2461】「2018 集训队互测 Day 1」完美的队列(分块+双指针)
    【LOJ6062】「2017 山东一轮集训 Day2」Pair(线段树套路题)
    【LOJ6060】「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基)
  • 原文地址:https://www.cnblogs.com/ghostwolf1/p/14141523.html
Copyright © 2011-2022 走看看