一、 介绍

Quartz是一个开源的定时任务调度框架,这里就不详细介绍了,我们直入主题
Quartz主要由三部分组成

  1. 任务:JobDetail
  2. 触发器:Trigger,(分两类:SimpleTrigger和常用的CronTrigger)
  3. 调度器:Scheduler

主要流程:比较简单: 先有JobDetail 装载定时任务类(需要实现Job接口),然后设置触发规则(如:cron表达式)来告知任务该按照什么样的规则执行,最后将两者放到调度器中,由调度器统一执行调度, 调度器主要是负责,任务的启动、暂停、恢复、修改、删除、添加等操作。

二、 代码

定时任务类:

import org.quartz.*;
import java.time.LocalDateTime; /**
 * @author guochunyun
 * @date 2019-12-18 下午 7:53
 */
public class HelloJop implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        JobKey key = context.getJobDetail().getKey();
        TriggerKey trkey = context.getTrigger().getKey();
        System.out.println("jobDetail: " +  key.getName() + " : " + key.getGroup() + " trigger: " + trkey.getName() + " : " + trkey.getGroup());         //获取jobDetail配置中自定义信息
        JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
        //获取Trigger配置中自定义信息
        JobDataMap trDataMap = context.getTrigger().getJobDataMap();
        System.out.println("jobDetail: " + jobDataMap.get("message") + " " + jobDataMap.get("floatJobValue") + "trigger: " + trDataMap.get("message") + " " + trDataMap.get("doubleTriggerValue"));         System.out.println("============>  hello world!  " + LocalDateTime.now());
    }
}

配置类:

mport org.quartz.*;
import org.quartz.impl.StdSchedulerFactory; import java.util.Date; /**
 * @author guochunyun
 * @date 2019-12-18 下午 7:55
 */
public class HelloScheduler {     public static void main(String[] args) throws SchedulerException {
        //创建一个jobDetail实例,将该实例与HelloJob 绑定
        JobDetail jobDetail = JobBuilder.newJob(HelloJop.class)
                .withIdentity("myJob", "group")
                //以下两个配置可以将自定义的map 传递到任务当中
                .usingJobData("message", "hello myJob")
                .usingJobData("floatJobValue", 3.14)
                .build();         //创建一个CronTrigger实例, 每隔五秒重复执行一次
        CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group")
                //以下两个配置可以将自定义的map 传递到任务当中
                .usingJobData("message", "hello myTrigger")
                .usingJobData("doubleTriggerValue", 3.1415926D)
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                .build();         //创建Scheduler实例,
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();         //启动定时任务
        scheduler.start();
        scheduler.scheduleJob(jobDetail, trigger);         //创建jobKey
        JobKey jobKey = new JobKey("myJob", "group");
        //创建TriggerKey
        TriggerKey triggerKey = new TriggerKey("myTrigger", "group");         try {
            //todo  特别注意此暂停只是调用暂停方法之后,任务不在执行, 等到执行恢复函数的时候 暂停时间内的任务会一次性全执行
            //15秒后暂停定时任务
            Thread.sleep(15000);
            scheduler.pauseJob(jobKey);
            System.out.println("===================");             //再等待15秒后开启定时任务
            Thread.sleep(15000);
            scheduler.resumeJob(jobKey);
            System.out.println("==================");             //修改定时任务
            CronTrigger trigger1 = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group")
                    .usingJobData("message", "hello myTrigger")
                    .usingJobData("doubleTriggerValue", 3.1415926D)
                    .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
                    .build();
            Date date = scheduler.rescheduleJob(triggerKey, trigger1);
            System.out.println("-----------------" + date);         } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

三、 我的组件

封装成springboot组件, 直接使用@QuartzJob注解并实现Job接口即可
组件地址

Quartz定时任务整理的更多相关文章

  1. 搭建maven web项目并配置quartz定时任务【业务:对比数据变化内容】 历程

    搭建maven web项目并配置quartz定时任务[业务:对比数据变化内容] 历程2018年03月03日 10:51:10 守望dfdfdf 阅读数:100更多个人分类: 工作 问题编辑版权声明:本 ...

  2. Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar

    web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...

  3. quartz定时任务框架的使用

    quartz定时任务时间设置 这些星号由左到右按顺序代表 :     *    *     *     *    *     *   *                                 ...

  4. Quartz定时任务学习(二)web应用

    web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...

  5. Quartz定时任务使用小记(11月22日)

    骤然接触quartz,先从小处着手,why,what,how quartz定时任务: 为什么使用quartz定时任务,以及定时任务在实际应用场景下的特定需求. 1.用户方面的需要,为了提供更好的使用体 ...

  6. quartz定时任务时间配置

    quartz定时任务时间设置描述(2011-03-03 16:23:50)转载▼标签: quartz时间it 分类: 凌乱小记  这些星号由左到右按顺序代表 :     *    *     *    ...

  7. 对quartz定时任务的初步认识

    已经好久没有写技术博文了,今天就谈一谈我前两天自学的quartz定时任务吧,我对quartz定时任务的理解,就是可以设定一个时间,然后呢,在这个时间到的时候,去执行业务逻辑,这是我的简单理解,接下来看 ...

  8. Spring整合Quartz定时任务执行2次,Spring定时任务执行2次

    Spring整合Quartz定时任务执行2次,Spring定时任务执行2次 >>>>>>>>>>>>>>>&g ...

  9. Quartz 定时任务时间设置

    转自https://blog.csdn.net/zdx1515888659/article/details/79158169 quartz定时任务时间设置: 这些星号由左到右按顺序代表 : * * * ...

随机推荐

  1. 在vue项目中如何添加eslint

    随着vue的越做越好,更多的开发者选择使用vue,本篇记录如何在vue项目中添加eslint. 首先第一种就是在vue项目创建初始时就选择了创建,随着初始化一起代入到了项目当中,那么要是一开始觉得es ...

  2. js基础——变量、作用域、内存

    1.new关键字创建的是引用类型: eg. var box = new Object();      box.name = "Linda";//引用类型添加属性没问题     al ...

  3. Spring 面试题汇总

    1.什么是SpringSpring是一个轻量级IoC和AOP容器框架,是为Java应用程序提供基础性服务的一套框架,目的是简化企业应用程序的开发,它使得开发者只需关注业务需求. 2.Spring的优点 ...

  4. 2019-4-10-win10-uwp-自定义标记扩展

    title author date CreateTime categories win10 uwp 自定义标记扩展 lindexi 2019-04-10 09:46:13 +0800 2019-04- ...

  5. gitLab操作规范和项目流程

    刚做完一个项目并且艰难得上线,对整个项目流程和gitLab规范 有了一些心得,给新来的同学普及一下. 最先产品会写一篇需求文档,咱们要先看需求文档对项目有一个大致了解,然后产品喊后端.ui.前端  一 ...

  6. eclipse要修改的配置

    1. 修改 html的字体大小 window->preferences->General--> appearance--> Colors and fonts-->basi ...

  7. Python12_关于文件概念的讨论与序列化

    文件是什么? 存储在一些设备上的信息的集合.一堆字节: ====================================================到底什么是二进制文件.和文本文件,它们有 ...

  8. DynamoDB的基本操作(一)

    一.创建表 1 var AWS = require("aws-sdk"); 2 AWS.config.update({ 3 region: "us-west-2" ...

  9. Python实现截图功能

    Python实现截图功能 Windows环境下需要用到PIL库,使用pip安装PIL库: pip install Pillow 安装完成,截图方法代码: from PIL import ImageGr ...

  10. Centos7源码编译安装mysql8

    前面介绍了很多关于mysql的文章,下面主要介绍一下mysql8的源码编译安装 一 基本环境 [root@CentOS-7-x86-64-Minimal-1810 ~]# cd /usr/local/ ...