Spring boot集成Quartz实现定时任务
目录
Quartz官方文档
1.Quartz介绍
-
Quartz
是一个功能丰富的开源作业调度库,它由 Java 写成,可以集成在任何 Java 应用程序中,包括 Java SE 和 Java EE 等。 -
使用
Quartz
可以创建简单或者复杂的执行计划,它支持数据库、集群、插件以及邮件,并且支持cron
表达式,具有极高的灵活性。 -
Spring Boot 中集成 Quartz 和 Spring 中集成 Quartz 比较类似,主要提供三个 Bean:
JobDetail、Trigger
以及SchedulerFactory
。
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。在java企业级应用中,Quartz是使用最广泛的定时调度框架
。
在Quartz中的主要概念:
- Scheduler:调度任务的主要API
- ScheduleBuilder:用于构建Scheduler,例如其简单实现类SimpleScheduleBuilder
- Job:调度任务执行的接口,也即定时任务执行的方法
- JobDetail:定时任务作业的实例
- JobBuilder:关联具体的Job,用于构建JobDetail
- Trigger:定义调度执行计划的组件,即定时执行
- TriggerBuilder:构建Trigger
1.1 Quartz的三大核心组件
- 调度器:Scheduler。作用是,用来统一管理工作内容、工作计划周期
- 任务:JobDetail。作用是,用来定义某项具体工作的工作内容
- 触发器:Trigger,包括 SimpleTrigger 和 CronTrigger。作用是,用来定义某项具体工作的执行频率。
(1)Job(任务):是一个接口,有一个方法 void execute(JobExecutionContext context) ,可以通过实现该接口来定义需要执行的任务(具体的逻辑代码)。
JobDetail:Quartz每次执行Job时,都重新创建一个Job实例,会接收一个Job实现类,以便运行的时候通过newInstance()的反射调用机制
去实例化Job。JobDetail是用来描述Job实现类以及相关静态信息,比如任务在scheduler中的组名等信息。
(2)Trigger(触发器):描述触发Job执行的时间触发规则实现类SimpleTrigger和CronTrigger可以通过cron表达式定义出各种复杂的调度方案。
Calendar:是一些日历特定时间的集合。一个Trigger可以和多个 calendar关联,比如每周一早上10:00执行任务,法定假日不执行,则可以通过calendar进行定点排除。
(3)Scheduler(调度器):代表一个Quartz的独立运行容器。Trigger和JobDetail可以注册到Scheduler中。Scheduler可以将Trigger绑定到某一JobDetail上,这样当Trigger被触发时,对应的Job就会执行。一个Job可以对应多个Trigger,但一个Trigger只能对应一个Job。
1.2 CronTrigger配置格式
格式:【秒】【分】【小时】【日】【月】【周】【年】
序号 | 说明 | 是否必填 | 允许填写的值 | 允许的通配符 |
---|---|---|---|---|
1 | 秒 | 是 | 0-59 | ,-*/ |
2 | 分 | 是 | 0-59 | ,-*/ |
3 | 小时 | 是 | 0-23 | ,-*/ |
4 | 日 | 是 | 1-31 | ,-*?/LW |
5 | 月 | 是 | 1-12 or JAN-DEC | ,-*/ |
6 | 周 | 是 | 1-7 or SUN-SAT | ,-*?/L# |
7 | 年 | 否 | empty 或 1970-2099 | ,-*/ |
通配符说明:
可通过在线生成Cron表达式的工具:http://cron.qqe2.com/ 来生成自己想要的表达式。
常用示例:
2.Springboot 整合Quartz框架
【示例】创建SpringBoot项目并整合Quartz框架,实现定时任务功能。
2.1 创建项目
(1)创建SpringBoot项目,项目结构如下图:
(2)使用Maven添加依赖文件:
在pom