1 Quartz定时任务

Quartz 是一个完全由 Java 编写的开源任务调度框架,为在 Java 应用程序中进行任务调度提供了简单却强大的机制。

基于定时、定期的策略来执行任务是它的核心功能,比如x年x月的每个星期五上午8点到9点,每隔10分钟执行1次。

Quartz有5个核心要素:调度器(Scheduler)、任务(Job)、触发器(Trigger)、JobDetail、Calendar。

(1)Job(任务):是一个接口,有一个方法void execute(JobExecutionContext context),在实现接口的 execute 方法中编写所需要定时执行的 Job(任务),JobExecutionContext 类提供了调度应用的一些信息;Job 运行时的信息保存在 JobDataMap 实例中。

(2)JobDetail:Quartz每次执行job时,都重新创建一个Job实例,会接收一个Job实现类,以便运行的时候通过newInstance()的反射调用机制去实例化Job.JobDetail是用来描述Job实现类以及相关静态信息,比如任务在scheduler中的组名等信息。

(3)Trigger(触发器):描述触发Job执行的时间触发规则实现类SimpleTrigger和CronTrigger可以通过crom表达式定义出各种复杂的调度方案。当且仅当需调度一次或者以固定时间间隔周期执行调度,SimpleTrigger 是最适合的选择;而 CronTrigger 则可以通过 Cron 表达式定义出各种复杂时间规则的调度方案:如工作日周一到周五的 15:00 ~ 16:00 执行调度等。

(4)Calendar:是一些日历特定时间的集合。一个Trigger可以和多个 calendar关联,比如每周一早上10:00执行任务,法定假日不执行,则可以通过calendar进行定点排除。

(5)Scheduler(调度器):代表一个Quartz的独立运行容器。Trigger和JobDetail可以注册到Scheduler中。Scheduler可以将Trigger绑定到某一JobDetail上,这样当Trigger被触发时,对应的Job就会执行。一个Job可以对应多个Trigger,但一个Trigger只能对应一个Job.

2 配置Maven依赖

<!--quartz定时任务-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

3 实现Job(定时任务)

package com.job;import cn.hutool.core.date.DateUtil;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;import java.util.Date;public class QuartJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {try {before(context);doExecute(context);after(context, null);} catch (Exception e) {System.out.println("定时任务执行失败:" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));after(context, e);}}/*** 执行前** @param context 工作执行上下文对象*/protected void before(JobExecutionContext context) {System.out.println("------------");System.out.println("开始执行定时任务:" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));}/*** 执行后** @param context 工作执行上下文对象*/protected void after(JobExecutionContext context, Exception e) {System.out.println("定时任务执行结束:" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));}/*** 执行方法** @param context 工作执行上下文对象* @throws Exception 执行过程中的异常*/protected void doExecute(JobExecutionContext context) throws Exception {//获取JobDetail中关联的数据String msg = (String) context.getJobDetail().getJobDataMap().get("msg");System.out.println("定时任务正在执行中");System.out.println("当前时间 :" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss") + "\n" + msg);}
}

4 创建QuartzConfig(生成定时任务实例和触发器)

package com.config;import com.job.QuartJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class QuartzConfig {/*** 创建Job实例** @return*/@Beanpublic JobDetail createJobDetail() {return JobBuilder.newJob(QuartJob.class)//业务类.withIdentity("QuartJob")//可以给该JobDetail起一个id//每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中可以通过context获取.usingJobData("msg", "Hello Quartz!  --旭东怪")//关联键值对.storeDurably()//即使没有Trigger关联时,也不需要删除该JobDetail.build();}/*** 创建触发器** @return*/@Beanpublic Trigger createTrigger() {CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/30 * * * * ?");return TriggerBuilder.newTrigger().forJob(createJobDetail())//关联上述的JobDetail.withIdentity("quartzTaskService")//给Trigger起个名字.withSchedule(cronScheduleBuilder).build();}
}

5 调试结果

Spring Boot配置Quartz定时任务相关推荐

  1. spring boot集成Quartz实现定时任务

    简介 Quartz是一款功能强大的任务调度器,Quartz有两个比较核心的组件:Job 和 Trigger. Quartz的三个基本要素 Scheduler:调度器,所有的调度都是由它来控制. Tri ...

  2. Spring Boot集成Quartz动态实现数据库任务

    1. Quartz简介 1.1. 什么是Quartz Quartz是一个开源的任务调度框架.作用是基于定时.定期的策略来执行任务. 它是OpenSymphony开源组织在Job scheduling领 ...

  3. java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  4. mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  5. spring中配置quartz定时器

    spring中配置quartz定时器 最近项目中用到定时器,项目用的spring所以想在spring中配置一下定时器,看到网上用quartz的比较多,所以就搜了一下.参考:http://blog.cs ...

  6. Spring Boot 配置元数据指南

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 遗失的拂晓 来源 | 公众号「锅外的大佬」 1. 概览 在编写 Spring Bo ...

  7. Spring Boot 配置随机数那些小技巧

    转载自  Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位M ...

  8. 19年8月 字母哥 第三章 spring boot 配置原理实战 用热点公司网不行

    第三章 spring boot 配置原理实战 3.1.结合配置加载讲解bean自动装配原理 3.2.详解YAML语法及占位符语法 3.3.获取自定义配置的两种实现方法 3.4.配置文件注入值数据校验 ...

  9. 在Spring boot 配置过滤器(filter)

    在spring boot 配置servlet filter 逻辑上与配置spring 是一样的. 不过相比spring 更加简化配置的难度. 这里只需要两步 1 创建一个自定义顾虑器并继承spring ...

最新文章

  1. Gridview数据显示实现按日期排序分割线
  2. Python 字符串操作方法大全
  3. java aio为什么不稳定_烯醇式结构为什么不稳定?
  4. [蓝桥杯][算法提高VIP]开灯游戏(dfs)
  5. selenium+python笔记3
  6. python目前版本强势英雄_王者荣耀目前版本什么英雄强势?
  7. Java 中 @Autowired与@Resource的区别
  8. 《Jquery实战》第3版:译者序 Frank Xu Lei
  9. HAN - Heterogeneous Graph Attention Network 异构图注意力网络 WWW2019
  10. JVM调优--04---dump文件分析 、arthas在线排查工具
  11. Skyline软件二次开发初级——8如何在WEB页面中的三维地图上管理信息树
  12. java 控件 布局工具_JavaFX应用程序可视化布局工具(JavaFX Scene Builder)下载 v2.0
  13. Nebula 分布式图数据库介绍
  14. arm指令bne.w改成b,即无条件跳转
  15. C++ 入门基础 取余数的应用价值
  16. 零基础学软件测试难吗?小白怎么半年内成为测试工程师
  17. 游戏服务器租用配置选择攻略(大型端游及中小型网页游戏选型)
  18. Lr CC Classic 2018 for Mac
  19. 一个等号= 二个等号== 三个等号=== 的区别
  20. [Linux转载]Linux 操作常用命令

热门文章

  1. 使用 Unity 和 C 开发您的首个游戏
  2. 求最小码距(完整版)
  3. Gitlab使用指引1(基础篇)
  4. 什么是wms仓储管理系统?
  5. 数组 和 集合的区别 尤其是ArrayList
  6. ArcGIS与地理加权回归【三】
  7. Win7+64位+Msflxgrd.ocx注册
  8. SubSonic介绍和相关文章
  9. 计算机的网络命令大全,计算机网络命令大全.doc
  10. 计算机的存储规则【小白进】