Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Quartz高可用定时任务快速上手

Quartz高可用定时任务快速上手

原创
作者头像
赛先生和泰先生
发布于 2022-04-01 13:29:49
发布于 2022-04-01 13:29:49
5710
举报
文章被收录于专栏:Java知识图谱Java知识图谱

定时任务使用指南

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

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

1、引入依赖
代码语言:html
AI代码解释
复制
<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-quartz</artifactId>
    <version>1.5.4.1</version>
</dependency>
2、快速上手

实现org.quartz.Job接口;使用注解CronExp添加任务的调度策略;使用注解Component将任务注入容器中。

启动项目,定时任务便处于监听与运行中。

代码语言:java
AI代码解释
复制
@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的任务。

代码语言:text
AI代码解释
复制
http://localhost:8080/cms-api/quartz/job/{jobId}

如果有手动触发定时任务的需求,则需要任务ID唯一并已知,因此需要在编写定时任务时手动指定。

代码语言:java
AI代码解释
复制
@CronExp(id = 1, cron = "0/5 * * * * ?")

通过注解CronExp的id属性可指定任务ID,不显示指定则使用随机ID,不满足已知的条件,因此无法手动触发。

4、带参数任务

尽管大多数任务不需要注入参数,但仍有少量的场景需要向定时任务注入参数。

代码语言:java
AI代码解释
复制
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,从而完成参数的注入。

代码语言:text
AI代码解释
复制
http://localhost:8080/cms-api/quartz/job/1?key=a

上述http调用的含义是手动触发任务ID为【1】的任务,并且向其传递参数为【key】值为【a】的参数。

5、任务并发

本框架不支持任务并发,换句话说并发对定时任务不利,因此需要手动禁止。

需要注意的是Quartz的并发是指当任务执行耗时超过任务调度周期时,上一个任务未执行完,新任务是否执行。

一般来说需要显示禁止并发,在任务类上添加注解DisallowConcurrentExecution即可禁止任务并发。

6、持久化

如果定时任务有高可用的需求,那么需要对任务进行持久化。定时任务数据持久化到数据库中后,支持应用程序多开。定时任务持久化多节点部署后,集群中单节点故障不影响定时任务的执行。

定时任务持久化,仅需修改yml文件配置即可达到目标,无需修改代码。一般而言使用Mysql做持久化的容器。

代码语言:yaml
AI代码解释
复制
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脚本,注意初始化数据库

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot中实现定时任务(Quartz)
Spring 3.0以后自带了 task 调度工具,使用比 Quartz简单方便,使用 @Scheduled 注解。
终有救赎
2023/10/22
7540
SpringBoot中实现定时任务(Quartz)
SpringBoot集成Quartz实现定时任务
在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计。我的设计是按天统计每种状态的比例。为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态。另外,考虑到学生的请假需求,请假的申请往往是提前做好,等系统时间走到实际请假时间的时候,系统要将学生的状态修改为请假。
用户5546570
2020/05/18
1.5K0
SpringBoot集成Quartz实现定时任务
分布式定时任务,你了解多少?基于Quartz实现分布式任务解决方案!
后台定时任务系统在应用平台中的重要性不言而喻,特别是互联网电商、金融等行业更是离不开定时任务。在任务数量不多、执行频率不高时,单台服务器完全能够满足。但是随着业务逐渐增加,定时任务系统必须具备高可用和水平扩展的能力,单台服务器已经不能满足需求。因此需要把定时任务系统部署到集群中,实现分布式定时任务系统集群。
章为忠学架构
2023/10/06
9.9K0
分布式定时任务,你了解多少?基于Quartz实现分布式任务解决方案!
Quartz定时任务框架使用教程详解
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能:
大忽悠爱学习
2021/12/07
2.5K0
Quartz定时任务框架使用教程详解
它来了,任务调度框架 Quartz保姆级教程奉上
点击上方蓝色字体,选择“设为星标” 回复”学习资料“获取学习宝典 前言 项目中遇到一个,需要 客户自定任务启动时间 的需求。原来一直都是在项目里硬编码一些定时器,所以没有学习过。 很多开源的项目管理框架都已经做了 Quartz 的集成。我们居然连这么常用得东西居然没有做成模块化,实在是不应该。 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quart
猿天地
2022/05/25
1.1K0
它来了,任务调度框架 Quartz保姆级教程奉上
​分布式定时任务框架Quartz
项目中总要写那么几个定时任务来处理一些事情。一些简单的定时任务使用Spring自带的定时任务就能完成。但是如果需要大量的定时任务的话要怎么才能统一管理呢?
乱敲代码
2020/05/21
4.9K0
任务调度框架Quartz(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail
首先给一个简明扼要的理解: Scheduler 调度程序-任务执行计划表,只有安排进执行计划的任务Job(通过scheduler.scheduleJob方法安排进执行计划),当它预先定义的执行时间到了的时候(任务触发trigger),该任务才会执行。
青山师
2023/05/04
2.3K0
任务调度框架Quartz(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail
springboot使用quartz实现定时任务_quartz集群任务调度
springboot使用quartz实现定时任务_quartz集群任务调度前言本文是对之前的一篇文章Spring+SpringMVC+mybatis+Quartz整合代码部分做的一个修改和补充,其中最大的变化就是后台框架变成了SpringBoot。本工程所用到的技术或工具有:SpringBootMybatisQuartzPageHelperVueJSElementUIMySql数据库正文配置本例中仍然是使用mysql数据库作为Quartz任务持久化的
Java架构师必看
2022/05/10
3.4K2
springboot使用quartz实现定时任务_quartz集群任务调度
搭建单体SpringBoot项目 集成定时器Quartz
​ Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。
郭顺发
2023/07/07
5810
第三十九章:基于SpringBoot & Quartz完成定时任务分布式单节点持久化
定时任务在企业项目比较常用到,几乎所有的项目都会牵扯该功能模块,定时任务一般会处理指定时间点执行某一些业务逻辑、间隔时间执行某一些业务逻辑等。我们在之前有讲过SpringBoot是已经集成了定时任务的,详见:第二十六章:SpringBoot使用@Scheduled创建定时任务,那么我们本章将会采用外置的quartz定时任务框架来完成定时任务的分布式单节点持久化,我们为什么要持久化定时任务呢? 在一些项目中定时任务可能是必不可少的,由于某种特殊的原因定时任务可能丢失,如重启定时任务服务项目后,原内存中的定时任
恒宇少年
2018/06/27
2.5K0
SpringBoot整合Quartz定时任务(持久化到数据库)
最近在做项目,项目中有个需求:需要使用定时任务,这个定时任务需要即时生效。 查看Quartz官网之后发现:Quartz提供两种基本作业存储类型:
全栈程序员站长
2022/07/25
2.4K0
SpringBoot整合Quartz定时任务(持久化到数据库)
Spring Boot Quartz 分布式集群任务调度实
在工程中时常会遇到一些需求,例如定时刷新一下配置、隔一段时间检查下网络状态并发送邮件等诸如此类的定时任务。 定时任务本质就是一个异步的线程,线程可以查询或修改并执行一系列的操作。由于本质是线程,在 Java 中可以自行编写一个线程池对定时任务进行控制,但这样效率太低了,且功能有限,属于重复造轮子。
乱敲代码
2019/06/26
2.9K1
java定时任务
引言:知易行难 这里我推荐使用第一种,Spring定时任务,简单又简介,高效 一、Spring定时任务 基于springboot创建一个项目,使用定时任务很简单 俩步即可实现 1、启动类上加注解@
栖西
2023/10/17
4070
java定时任务
Quartz定时任务框架:原理、应用与实战
今日推荐 《TCP/IP 协议职责和常见的三种模型介绍》这篇文章介绍了了如何使用Python构建一个智能食品包装设计的深度学习模型。从数据准备、模型构建、训练、评估到实际应用,每一步都有详细的代码说明。这样的技术不仅能够提高食品包装设计的效率和质量,还能根据市场需求实现个性化和智能化设计,为消费者带来更好的体验。
Front_Yue
2024/11/25
1.1K0
Quartz定时任务框架:原理、应用与实战
精进 Quartz—Quartz大致介绍(一)
分享一位老师的人工智能教程。零基础!通俗易懂!风趣幽默! 大家可以看看是否对自己有帮助,点击这里查看【人工智能教程】。接下来进入正文。
全栈程序员站长
2022/02/27
2.2K0
精进 Quartz—Quartz大致介绍(一)
分布式定时任务调度框架实践
分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的使用进行了探究实践,并分析了这几种框架的优劣势和对自身业务的思考。
2020labs小助手
2020/03/09
1.3K0
xxl-job中关于quartz中的配置详解
xxl-job将调度行为抽象形成"调度中心"公共平台,而平台自身并不承担业务逻辑,"调度中心"负责发起调度请求。将任务抽象成分散的JobHandler,交由"执行器"统一管理,"执行器"负责接收调度请求并执行对应的JobHandler中业务逻辑。因此,"调度"和"任务"两部分可以相互解耦,提高系统整体稳定性和扩展性。
用户2032165
2019/04/18
4.7K0
xxl-job中关于quartz中的配置详解
springboot quartz 动态添加任务(quartz分布式定时任务)
需实现Job接口,这个接口就一个execute()方法需要重写,方法内容就是具体的业务逻辑。如果是动态任务呢,比如取消订单,每次执行都是不同的订单号。这个时候就需要在创建任务(JobDetail)或者创建触发器(Trigger)的那里传入参数,然后在这里通过JobExecutionContext来获取参数进行处理,
全栈程序员站长
2022/08/01
3.4K0
springboot quartz 动态添加任务(quartz分布式定时任务)
Spring整合Quartz定时任务 在集群、分布式系统中的应用
虽然单个Quartz实例能给予你很好的Job调度能力,但它不能满足典型的企业需求,如可伸缩性、高可靠性满足。假如你需要故障转移的能力并能运行日益增多的 Job,Quartz集群势必成为你应用的一部分了。
用户4283147
2022/10/27
1.3K0
Spring整合Quartz定时任务 在集群、分布式系统中的应用
第四十章:基于SpringBoot & Quartz完成定时任务分布式多节点负载持久化
在上一章【第三十九章:基于SpringBoot & Quartz完成定时任务分布式单节点持久化】中我们已经完成了任务的持久化,当我们创建一个任务时任务会被quartz定时任务框架自动持久化到数据库,我们采用的是SpringBoot项目托管的dataSource来完成的数据源提供,当然也可以使用quartz内部配置数据源方式,我们的标题既然是提到了定时任务的分布式多节点,那么怎么才算是多节点呢?当有节点故障或者手动停止运行后是否可以自动漂移任务到可用的分布式节点呢? 本章目标 完成定时任务分布式多节点配置
恒宇少年
2018/06/27
3.3K0
推荐阅读
相关推荐
SpringBoot中实现定时任务(Quartz)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档