ApiBoot - ApiBoot Quartz 使用文档

ApiBoot Quartz

ApiBoot内部集成了Quartz,提供了数据库方式内存方式的进行任务的存储,其中数据库方式提供了分布式集群任务调度,任务自动平滑切换执行节点。

引用ApiBoot Quartz

pom.xml配置文件内添加,如下配置:

<!--ApiBoot Quartz-->
<dependency><groupId>org.minbox.framework</groupId><artifactId>api-boot-starter-quartz</artifactId>
</dependency>
复制代码

备注:如果使用ApiBoot Quartz的内存方式,仅需要添加上面的依赖即可。

相关配置

参数名称是否必填默认值描述
api.boot.quartz.job-store-typememory任务存储源方式,默认内存方式
api.boot.quartz.scheduler-namescheduler调度器名称
api.boot.quartz.auto-startuptrue初始化后是否自动启动调度程序
api.boot.quartz.startup-delay0初始化完成后启动调度程序的延迟。
api.boot.quartz.wait-for-jobs-to-complete-on-shutdownfalse是否等待正在运行的作业在关闭时完成。
api.boot.quartz.overwrite-existing-jobsfalse配置的作业是否应覆盖现有的作业定义。
api.boot.quartz.propertiesQuartz自定义的配置属性,具体参考quartz配置
api.boot.quartz.jdbc配置数据库方式的Jdbc相关配置

内存方式

ApiBoot Quartz在使用内存方式存储任务时,不需要做配置调整。

数据库方式

需要在application.yml配置文件内修改api.boot.quartz.job-store-type参数,如下所示:

api:
  boot:
    quartz:# Jdbc方式
      job-store-type: jdbc
复制代码

Quartz所需表结构

Quartz的数据库方式内部通过DataSource获取数据库连接对象来进行操作数据,所操作数据表的表结构是固定的,ApiBootQuartz所支持的所有表结构都进行了整理,访问Quartz支持数据库建表语句列表查看,复制执行对应数据库语句即可。

创建任务类

我们只需要让新建类集成QuartzJobBean就可以完成创建一个任务类,如下简单示例:

/*** 任务定义示例* 与Quartz使用方法一致,ApiBoot只是在原生基础上进行扩展,不影响原生使用* <p>* 继承QuartzJobBean抽象类后会在项目启动时会自动加入Spring IOC** @author:恒宇少年 - 于起宇* <p>* DateTime:2019-03-28 17:26* Blog:http://blog.yuqiyu.com* WebSite:http://www.jianshu.com/u/092df3f77bca* Gitee:https://gitee.com/hengboy* GitHub:https://github.com/hengboy*/
public class DemoJob extends QuartzJobBean {/*** logger instance*/static Logger logger = LoggerFactory.getLogger(DemoJob.class);@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {logger.info("定时任务Job Key : {}", context.getJobDetail().getKey());logger.info("定时任务执行时所携带的参数:{}", JSON.toJSONString(context.getJobDetail().getJobDataMap()));//...处理逻辑}
}
复制代码

任务参数

在任务执行时传递参数是必须的,ApiBoot Quartz提供了比较方便的传递方式,不过最终Quartz会把传递的值都会转换为String类型数据。

任务Key默认值

ApiBoot QuartznewJob方法所创建的定时任务,如果在不传递Job Key参数时,会默认使用UUID随机字符串作为Job Key以及Trigger Key

自定义任务开始时间

任务开始时间可以通过startAtTime方法进行设置,在不设置的情况下,任务创建完成后会立刻执行。

Cron 表达式任务

创建Cron类型任务如下所示:

String jobKey = apiBootQuartzService.newJob(ApiBootCronJobWrapper.Context().jobClass(DemoJob.class).cron("0/5 * * * * ?").param(ApiBootJobParamWrapper.wrapper().put("param", "测试")).wrapper());
复制代码

Cron 表达式任务由ApiBootCronJobWrapper类进行构建。

上面的DemoJob任务类将会每隔5秒执行一次。

Loop 重复任务

Loop循环任务,当在不传递重复执行次数时,不进行重复执行,仅仅执行一次,如下所示:

String jobKey = apiBootQuartzService.newJob(ApiBootLoopJobWrapper.Context()// 参数.param(ApiBootJobParamWrapper.wrapper().put("userName", "恒宇少年").put("userAge", 24))// 每次循环的间隔时间,单位:毫秒.loopIntervalTime(2000)// 循环次数.repeatTimes(5)// 开始时间,10秒后执行.startAtTime(new Date(System.currentTimeMillis() + 10000))// 任务类.jobClass(DemoJob.class).wrapper());
复制代码

Loop 任务由ApiBootLoopJobWrapper类进行构建。

上面的定时任务将会重复执行5次,连上自身执行的一次也就是会执行6次,每次的间隔时间为2秒,在任务创建10秒后进行执行。

Once 一次性任务

Once一次性任务,任务执行一次会就会被自动释放,如下所示:


Map paramMap = new HashMap(1);
paramMap.put("paramKey", "参数值");String jobKey = apiBootQuartzService.newJob(ApiBootOnceJobWrapper.Context().jobClass(DemoJob.class)// 参数.param(ApiBootJobParamWrapper.wrapper().put("mapJson", JSON.toJSONString(paramMap)))// 开始时间,2秒后执行.startAtTime(new Date(System.currentTimeMillis() + 2000)).wrapper()
);复制代码

Once 任务由ApiBootOnceJobWrapper类进行构建。

在参数传递时可以是对象、集合,不过需要进行转换成字符串才可以进行使用。

暂停任务执行

任务在执行过程中可以进行暂停操作,通过ApiBoot Quartz提供的pauseJob方法就可以很简单的实现,当然暂停时需要传递Job KeyJob Key可以从创建任务方法返回值获得。

暂停任务如下所示:

// 暂停指定Job Key的任务
apiBootQuartzService.pauseJob(jobKey);
// 暂停多个执行中任务
apiBootQuartzService.pauseJobs(jobKey,jobKey,jobKey);
复制代码

恢复任务执行

任务执行完暂停后,如果想要恢复可以使用如下方式:

// 恢复指定Job Key的任务执行
apiBootQuartzService.resumeJob(jobKey);
// 恢复多个暂停任务
apiBootQuartzService.resumeJobs(jobKey,jobKey,jobKey);
复制代码

修改Cron表达式

修改Cron表达式的场景如下:

  • 已创建 & 未执行
  • 已创建 & 已执行

修改方法如下所示:

// 修改执行Job Key任务的Cron表达式
apiBootQuartzService.updateJobCron(jobKey, "0/5 * * * * ?");
复制代码

删除任务

想要手动释放任务时可以使用如下方式:

// 手动删除指定Job Key任务
apiBootQuartzService.deleteJob(jobKey);
// 手动删除多个任务
apiBootQuartzService.deleteJobs(jobKey,jobKey,jobKey);
复制代码

删除任务的顺序如下:

  1. 暂停触发器
  2. 移除触发器
  3. 删除任务 本章源码地址:github.com/hengboy/api…

转载于:https://juejin.im/post/5ca57e756fb9a05e51235ec4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《算法竞赛进阶指南》0.4二分

102. 最佳牛围栏 农夫约翰的农场由N块田地组成&#xff0c;每块地里都有一定数量的牛,其数量不会少于1头&#xff0c;也不会超过2000头。 约翰希望用围栏将一部分连续的田地围起来&#xff0c;并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。 围起区域内至少需要包…

Hibernate 自动创建表

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 在 hibernate.cfg.xml 添加这句话&#xff0c;可以自动生成数据表 : <property name"hibernate.hbm2ddl.auto">upd…

程序员越老越优秀吗?

Peter Knego 向我们展示了一些有趣的东西&#xff1a; 官方数据&#xff1a;程序员年纪越大越出色、越稀有。他使用StackOverflow的声誉值和其它几个指标来印证他的观点。 他的总结是&#xff1a; 随着年龄的增加&#xff0c;程序员的数量急剧下降。程序员数量的峰值出现在2…

小程序学习(一):点击爱心变色 -- 最简单的事件实现

最近在学习小程序&#xff0c;想通过写文章来记录自己的学习历程&#xff0c;希望能做到每周都写…… 如何绑定一个事件 微信小程序中&#xff0c;绑定事件要在标签内写入这两段代码&#xff1a; bindtap"fnActive" data-favourite "{{isLike}}" 复制代码…

安全通信

安全通信 应用层协议大多数自己都没有实现加解密功能&#xff0c;比如http等。http就是直接把数据加载进来然后做简单编码&#xff08;也就是流式化&#xff09;然后响应客户端&#xff0c;然后数据在浏览器展示&#xff0c;这个数据在传输过程是明文的&#xff0c;你截获就可以…

出现 java.lang.NullPointerException 的几种原因、可能情况

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。一般报 java.lang.NullPointerException的 原因有以下几种&#xff1a;1. 字符串变量未初始化 。 2. 接口类型的对象没有用具体的类初始化…

纯JPA 入门小案例(2)

2019独角兽企业重金招聘Python工程师标准>>> JPA中的主键生成策略 通过annotation&#xff08;注解&#xff09;来映射hibernate实体的,基于annotation的hibernate主键标识为Id, 其生成规则由GeneratedValue设定的.这里的id和GeneratedValue都是JPA的标准用法。 JPA…

spring IoC/DI

一、spring创建对象的三种方式&#xff1a;1、通过构造方法创建无参构造创建&#xff1a;默认情况有参构造创建&#xff1a;需要明确配置<constructor-arg>中配置index&#xff1a;参数索引name&#xff1a;参数名type&#xff1a;参数类型&#xff08;区分基本数据类型和…

并发不是并行,它更好!

原文链接&#xff0c;译文链接&#xff0c;译者&#xff1a;雷哥&#xff0c;饶命&#xff0c;校对&#xff1a;李任 现代社会是并行的&#xff1a;多核、网络、云计算、用户负载&#xff0c;并发技术对此有用。 Go语言支持并发&#xff0c;它提供了&#xff1a;并发执行&…

详解设计模式在Spring中的应用

设计模式作为工作学习中的枕边书&#xff0c;却时常处于勤说不用的尴尬境地&#xff0c;也不是我们时常忘记&#xff0c;只是一直没有记忆。 今天&#xff0c;在IT学习者网站就设计模式的内在价值做一番探讨&#xff0c;并以spring为例进行讲解&#xff0c;只有领略了其设计的思…

开大你的音响,感受HTML5 Audio API带来的视听盛宴

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 话说HTML5的炫酷真的是让我爱不释手&#xff0c;即使在这个提到IE就伤心不完的年代。但话又说回来&#xff0c;追求卓越Web创造更美世界…

Microsoft Visual Studio 2010(vs2010) 中文版安装

Microsoft Visual Studio 2010(vs2010) 中文版安装 日期&#xff1a;2019-05-12 时间&#xff1a;20:03:36 编辑&#xff1a;张国富 下载地址 基本简介 Microsoft Visual Studio&#xff08;vs2010是简称&#xff09;是微软公司推出的开发环境。visual studio 2010…

JVM的几点性能优化

HotSpot&#xff0c;家喻户晓的JVM&#xff0c;我们的Java和Scala程序就运行在它上面。年复一年&#xff0c;一次又一次的迭代&#xff0c;经过无数工程师的不断优化&#xff0c;现在它的代码执行的速度和效率已经逼近本地编译的代码了。 它的核心是一个JIT&#xff08;Just-I…

IDEA配置 及 快捷键

出处&#xff1a; https://www.cnblogs.com/hero123/p/10120552.html 快捷键&#xff1a; 格式化代码 CtrlaltL 后退Ctrlalt <- 格式化代码快捷键&#xff1a;Ctrl Alt L 删除整行&#xff1a;CtrlX 实现类 ctrl alt CtrlN 查找类 CtrlShiftN 查找文件 CTRLSHIFTALTN 查找…

LeetCode Decode Ways

123123转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/10854545.html

SpringBoot 之集成 Spring AOP

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 在开始之前&#xff0c;我们先把需要的jar包添加到工程里。新增Maven依赖如下&#xff1a; <dependency><groupId>org.spri…

9件事把你从消极情绪中解救出来

也许你很难相信&#xff0c;但是情绪可以通过重复形成习惯。消极情绪甚至可以变成某种嵌入你每日生活的东西。 如何将它们赶跑? 你发现你不断地埋怨世界和自己?你可以轻易地生气并且对人变得刻薄?那愤怒又是否成为你对事情本能的回应了?如果你对所述问题中的一个回答了“是…

数据库主键自增插入显示值

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主同意不得转载。 https://blog.csdn.net/nwsuaf2009012882/article/details/32703597 SQL Server 2008 数据库主键自增插入显示值 前几天在工作的时候遇到在删除数据库中表的数据的时候。删除之后&#xff0c;又一次…

解决: This application has no explicit mapping for /error, so you are seeing this as a fallback.

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题&#xff0c;出现这个异常说明了跳转页面的url无对应的值. 原因1: Application启动类的位置不对.要将Application类放在最外侧…

Selenium自动化获取WebSocket信息

性能日志 ChromeDriver支持性能日志记录&#xff0c;您可以从中获取域“时间轴”&#xff0c;“网络”和“页面”的事件&#xff0c;以及指定跟踪类别的跟踪数据。启用性能日志 默认情况下不启用性能日志记录。因此&#xff0c;在创建新会话时&#xff0c;您必须启用它。 Desir…