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
除了修改主机、端口、数据库名、用户名、密码五个参数外,其余参数使用默认值即可。
配置完数据库连接后,使用SQL脚本,注意初始化数据库
Quartz高可用定时任务快速上手的更多相关文章
- Quartz.NET快速上手第一课(官网文档翻译)
Quartz.NET快速上手第一课(官网文档翻译) 原文链接 在你使用调度者(scheduler)之前,你需要对它进行实例化(谁能猜到这呢?).在实例化scheduler时候,你需要使用ISchedu ...
- 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】
一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的序列化机制,可以序列到 sqlserver,mysql,当然还可以在 ...
- RabbitMQ上手记录–part 5-节点集群高可用(多服务器)
上一part<RabbitMQ上手记录–part 4-节点集群(单机多节点)>中介绍了RabbitMQ集群的一些概念以及实现了在单机上运行多个节点,并且将多个节点组成一个集群. 通常情况下 ...
- 高可用Kubernetes集群-16. ansible快速部署
说明 本文档指导采用二进制包的方式快速部署高可用kubernetes集群. 脚本托管:k8s-ansible(持续更新) 参考:高可用kubernetes集群 组件版本 组件 版本 备注 centos ...
- 看我如何快速学习.Net(高可用数据采集平台)
最近文章:高可用数据采集平台(如何玩转3门语言php+.net+aauto).高并发数据采集的架构应用(Redis的应用) 项目文档:关键词匹配项目深入研究(二)- 分表思想的引入 吐槽:本人也是非常 ...
- Java学习---Quartz定时任务快速入门
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...
- 快速搭建基于Azure Paas的高可用WordPress网站
产品详情 产品介绍 WordPress是一种使用非常广泛的CMS系统.本应用是根据Azure Resource Manager模板创建的.通过该ARM模板可以快速建立web应用和MySQL数据库,部署 ...
- 分享《Python 游戏编程快速上手(第3版)》高清中文版PDF+高清英文版PDF+源代码
通过编写一个个小巧.有趣的游戏来学习Python,通过实例来解释编程的原理的方式.14个游戏程序和示例,介绍了Python基础知识.数据类型.函数.流程控制.程序调试.流程图设计.字符串操作.列表和字 ...
- 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...
随机推荐
- ansible复习笔记_基础-从零到无
--创建时间:2021年1月25日 --修改时间:2021年3月9日 --作者:飞翔的小胖猪 前言 该文档仅作为作者复习ansible使用,对格式和流程没有做过多的编排和概述.不喜勿喷. 基础 ans ...
- POJ3368题解
题目大意:一个非降序序列,有若干查询,每次查询一个区间中重复次数最多的数字的个数. 思路:因为是非降序的,所以可以从头遍历把每个相同的数字划为一个块,用p[i]表示ai划分到了哪个块里面,同时还可以记 ...
- pyqt(三)
六.按钮控件 QPushButton 常见的按钮实现类包括:QPushButton.QRadioButton和QCheckBox QPushButton是最普通的按钮控件,可以响应一些用户的事件 fr ...
- Web安全学习
项目地址(参考):https://websec.readthedocs.io/zh/latest/basic/history.html 本文只能充当目录简介,具体还要自己深入学习. 序章 Web技术演 ...
- glibc2.29以上 IO_FILE 及 house of pig
摆烂很长时间之后,终于下定决心来看点新的东西.正好 winmt 师傅前不久把他 pig 修好的附件发给我了,我就借此来学习一下新版本的 IO_FILE 及 house of pig. 新版本的 IO_ ...
- 【战略】以色列公司的数据驱动tip
Eric Rapps:我们的团队获得了大量的收入,并且持续保持着增长.如果获得我们的投资,实际上是你是获得了和相关领域技术积累.专家沟通的支持.但更重要的是,你可以近距离地接触我们的运营资源,您可以直 ...
- laravel 怎么获取public路径
app_path() app_path函数返回app目录的绝对路径: $path = app_path(); 你还可以使用app_path函数为相对于app目录的给定文件生成绝对路径: $pa ...
- Python列表生成
# For More :http://www.codebelief.com/article/2017/02/python-advanced-programming-list-comprehension ...
- MATLAB绘制三角网及三维网线
今天博主给大家介绍一些比较常见的可视化操作,绘制三角网及三维网线. 三角网是由一系列连续三角形构成的网状的平面控制图形,是三角测量中布设连续三角形的两种主要扩展形式,同时向各方向扩展而构成网状,优点为 ...
- 逆置单链表(基于c语言)
直接插入全部代码:(reverseLinklist函数是逆置操作) #include <stdio.h> #include <stdlib.h> #include <as ...