千家信息网

Java中Quartz高可用定时任务怎么实现

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇内容介绍了"Java中Quartz高可用定时任务怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2025年02月04日Java中Quartz高可用定时任务怎么实现

本篇内容介绍了"Java中Quartz高可用定时任务怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

定时任务使用指南

如果你想做定时任务,有高可用方面的需求,或者仅仅想入门快,上手简单,那么选用它准没错。

定时任务模块是对Quartz框架进一步封装,使用更加简洁。

1、引入依赖

    xin.altitude.cms    ucode-cms-quartz    1.5.4.1

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 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脚本,注意初始化数据库

"Java中Quartz高可用定时任务怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

任务 参数 手动 数据 数据库 注解 接口 需求 一般来说 内容 周期 容器 更多 有高 框架 知识 节点 支持 调度 运行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何配置php服务器 饥荒联机版线下服务器无应答 山东济南服务器配件总代理云空间 数据库文件没有权限打开 计算机3机等级考试网络技术 华为云数据库ei产品线 数据库可以连接别人的数据库吗 四大医学期刊数据库 Python系统级软件开发 自动连接服务器 软件开发合同和购买合同差异 网络安全要刷leetcode 数据库CDC产品有哪些 全方位网络安全管理 计算机网络技术对口考试试题 家庭网络安全教育笔记朱巍 关于网络安全宣传的手抄报 安徽微信小程序服务器 软件开发公司外协能力标准 达梦数据库6 64位下载 浙江通讯软件开发设施有哪些 南理考研网络安全 云锐互联网科技有限公司 银行失信数据库怎么查 附加数据库没有文件 软件开发合同税收政策 广东智能软件开发销售价格 客淘网络技术有限公司 吉林网络技术分类设计 网络安全维护管理制度
0