定时工作使用指南
如果你想做定时工作,有高可用
方面的需要,或者仅仅想入门快
,上手简略,那么选用它准没错。
定时工作模块是对Quartz框架进一步封装,应用更加简洁。
1、引入依赖
<dependency> <groupId>xin.altitude.cms</groupId> <artifactId>ucode-cms-quartz</artifactId> <version>1.5.4.1</version></dependency>
2、疾速上手
实现org.quartz.Job
接口;应用注解CronExp
增加工作的调度策略;应用注解Component
将工作注入容器中。
启动我的项目,定时工作便处于监听与运行中。
@Component@DisallowConcurrentExecution@CronExp(cron = "0/5 * * * * ?")public class DemoJob implements Job { @Override public void execute(JobExecutionContext context) { System.out.println("工作1:" + LocalDateTime.now()); }}
3、手动触发定时工作
定时工作除了以既有频率周期性运行外,还有通过接口手动被触发的能力。
调用如下接口,可手动触发工作ID编号为jobId
的工作。
http://localhost:8080/cms-api/quartz/job/{jobId}
如果有手动触发定时工作的需要,则须要工作ID惟一并
且已知
,因而须要在编写定时工作时手动指定。
@CronExp(id = 1, cron = "0/5 * * * * ?")
通过注解CronExp
的id属性可指定工作ID,不显示指定则应用随机ID,不满足已知的条件,因而无奈手动触发。
4、带参数工作
只管大多数工作不须要注入参数,但仍有大量的场景须要向定时工作注入参数。
public void execute(JobExecutionContext context) { /* 如果在调用工作时传入了参数,则可能从Map中获取 */ Map<String, Object> dataMap = context.getMergedJobDataMap(); /* 比方从Map中获取一个键值对,一般来说参数均为根本数据类型 */ Object key = dataMap.get("key"); System.out.println("工作2:" + LocalDateTime.now() + ": " + key);}
在编写定时工作时,可从JobExecutionContext
对象中解析一个Map,从而实现参数的注入。
http://localhost:8080/cms-api/quartz/job/1?key=a
上述http调用的含意是手动触发工作ID为【1】的工作,并且向其传递参数为【key】值为【a】的参数。
5、工作并发
本框架不反对工作并发,换句话说并发对定时工作不利,因而须要手动禁止。
须要留神的是Quartz
的并发是指当工作执行耗时超过任务调度周期时,上一个工作未执行完,新工作是否执行。
一般来说须要显示禁止并发,在工作类上增加注解DisallowConcurrentExecution
即可禁止工作并发。
6、长久化
如果定时工作有高可用的需要,那么须要对工作进行长久化。定时工作数据长久化到数据库中后,反对应用程序多开。定时工作长久化多节点部署后,集群中单节点故障不影响定时工作的执行。
定时工作长久化,仅需批改yml文件配置即可达到目标,无需批改代码。一般而言应用Mysql做长久化的容器。
spring: quartz: properties: org.quartz.jobStore.isClustered: true org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource: qzDS org.quartz.dataSource.qzDS.driver: com.mysql.cj.jdbc.Driver org.quartz.dataSource.qzDS.URL: jdbc:mysql://localhost:3306/quartz-demo org.quartz.dataSource.qzDS.user: root org.quartz.dataSource.qzDS.password: 123456
除了批改主机、端口、数据库名、用户名、明码五个参数外,其余参数应用默认值即可。
配置完数据库连贯后,应用SQL脚本,留神初始化数据库
如有疑难,可通过微信dream4s
与作者分割。源码在GitHub,视频解说在B站,本文珍藏在博客天地。