仓廪实则知礼节,衣食足则知荣辱。这篇文章主要讲述Quartz高可用定时任务快速上手相关的知识,希望能为你提供帮助。
定时任务使用指南
如果你想做定时任务,有高可用
方面的需求,或者仅仅想入门快
,上手简单,那么选用它准没错。
定时任务模块是对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
【Quartz高可用定时任务快速上手】除了修改主机、端口、数据库名、用户名、密码五个参数外,其余参数使用默认值即可。
推荐阅读
- Prometheus监控clickhouse服务
- JavaScript实现气球打字游戏
- Spring认证指南|了解如何创建异步服务方法。
- 手绘模型图带你认识Kafka服务端网络模型
- DNS解析工具之digtcping
- 图解数据结构排序全面总结(下)
- 指针的进阶
- POP3(基于命令行的电子邮件(EMail)在线查看和批量下载工具)
- 登录令牌JWT一文详解 — JSON WEB TOKEN#yyds干货盘点#