小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
学了那么久的quartz框架,都是在基于quartz默认配置的基础上操作的,这次就来学习以下如何自定义配置quartz的相关属性。
- 默认配置
首先看一下Quartz框架在不进行任何配置,即使用quartz默认配置项时,执行项目。
1.1 控制台输出
1.2 内容含义
1 | java复制代码//启动 |
2.自定义配置
通过默认配置下的quartz信息输出可以看到,quartz默认不支持数据的持久化,且无集群支持;但是在实际项目使用中,为了保证相关数据的准确和定时任务执行稳定,通常会将定时任务的信息持久化到数据库中。
2.1 初始化数据表
在quartz官网下载quartz ,然后解压文件,找到其中的sql文件。quartz2.4.0版本的sql路径为:\quartz-2.4.0-SNAPSHOT\src\org\quartz\impl\jdbcjobstore
找到如下mysql的语句:
在对应的数据库中执行sql语句,生成数据表结构如下:
对应的表含义为:
- qrtz_blob_triggers:以blob格式存放自定义trigger信息
- qrtz_calendars:记录quartz任务中的日历信息
- qrtz_cron_triggers:记录cronTrigger,即cron表达式相关触发器的信息
- qrtz_fired_triggers:存储正在触发的定时器的信息,执行完后数据清空
- qrtz_job_details:记录每个定时任务详细信息的表
- qrtz_locks:分布式处理时多个节点定时任务的锁信息
- qrtz_paused_triggers_grps:存储暂停的任务触发器信息
- qrtz_scheduler_state:记录调度器状态的表
- qrtz_simple_triggers:记录SimpleTrigger,即普通的触发器信息
- qrtz_simprop_triggers:存储CalendarIntervalTrigger和DailyTimeIntervalTrigger触发器信息
- qrtz_triggers:记录每个触发器详细信息的表
2.2 自定义配置内容
对于quartz框架的配置信息,可以将内容配置在quartz.properties文件中,并通过Properties读取配置内容。
1 | properties复制代码# 调度器实例名称(不配置则使用默认配置:quartzScheduler) |
2.3 初始化配置并注入
使用quartz.properties文件配置后,还需要将配置的信息应用到定时任务调度器对象中,这就需要在Spring配置类中对quartz的属性进行初始化,并通过容器管理注入到调度器中。
1 | java复制代码@Configuration |
2.3 自定义配置启动
数据源开启持久、集群配置后,项目运行输出内容:
如果在springboot的application.yml/properties 文件中配置quartz属性,那么quartz.properties内容不生效。
- 总结
根据官方提供的sql语句创建定时任务表,并配置quartz的持久化方式,最后在项目执行时就会使用配置的方式来持存储定时任务数据。
数据支持持久化后,数据表中会记录需要执行的任务,这样就算系统出现了故障宕机,在恢复之后耽搁的定时任务也会恢复继续执行。
如果使用了集群配置,多个定时任务服务操作同一个数据库,quartz同样提供了锁等一系列方式来保证分布式数据的准确性。
本文转载自: 掘金