Spring Boot配置Quartz定时任务
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定时任务相关推荐
- spring boot集成Quartz实现定时任务
简介 Quartz是一款功能强大的任务调度器,Quartz有两个比较核心的组件:Job 和 Trigger. Quartz的三个基本要素 Scheduler:调度器,所有的调度都是由它来控制. Tri ...
- Spring Boot集成Quartz动态实现数据库任务
1. Quartz简介 1.1. 什么是Quartz Quartz是一个开源的任务调度框架.作用是基于定时.定期的策略来执行任务. 它是OpenSymphony开源组织在Job scheduling领 ...
- java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
- mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
- spring中配置quartz定时器
spring中配置quartz定时器 最近项目中用到定时器,项目用的spring所以想在spring中配置一下定时器,看到网上用quartz的比较多,所以就搜了一下.参考:http://blog.cs ...
- Spring Boot 配置元数据指南
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 遗失的拂晓 来源 | 公众号「锅外的大佬」 1. 概览 在编写 Spring Bo ...
- Spring Boot 配置随机数那些小技巧
转载自 Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位M ...
- 19年8月 字母哥 第三章 spring boot 配置原理实战 用热点公司网不行
第三章 spring boot 配置原理实战 3.1.结合配置加载讲解bean自动装配原理 3.2.详解YAML语法及占位符语法 3.3.获取自定义配置的两种实现方法 3.4.配置文件注入值数据校验 ...
- 在Spring boot 配置过滤器(filter)
在spring boot 配置servlet filter 逻辑上与配置spring 是一样的. 不过相比spring 更加简化配置的难度. 这里只需要两步 1 创建一个自定义顾虑器并继承spring ...
最新文章
- Gridview数据显示实现按日期排序分割线
- Python 字符串操作方法大全
- java aio为什么不稳定_烯醇式结构为什么不稳定?
- [蓝桥杯][算法提高VIP]开灯游戏(dfs)
- selenium+python笔记3
- python目前版本强势英雄_王者荣耀目前版本什么英雄强势?
- Java 中 @Autowired与@Resource的区别
- 《Jquery实战》第3版:译者序 Frank Xu Lei
- HAN - Heterogeneous Graph Attention Network 异构图注意力网络 WWW2019
- JVM调优--04---dump文件分析 、arthas在线排查工具
- Skyline软件二次开发初级——8如何在WEB页面中的三维地图上管理信息树
- java 控件 布局工具_JavaFX应用程序可视化布局工具(JavaFX Scene Builder)下载 v2.0
- Nebula 分布式图数据库介绍
- arm指令bne.w改成b,即无条件跳转
- C++ 入门基础 取余数的应用价值
- 零基础学软件测试难吗?小白怎么半年内成为测试工程师
- 游戏服务器租用配置选择攻略(大型端游及中小型网页游戏选型)
- Lr CC Classic 2018 for Mac
- 一个等号= 二个等号== 三个等号=== 的区别
- [Linux转载]Linux 操作常用命令