摘要:重复任务循环任务,当在不传递重复执行次数时,不进行重复执行,仅仅执行一次,如下所示参数恒宇少年每次循环的间隔时间,单位毫秒循环次数开始时间,秒后执行任务类任务由类进行构建。
ApiBoot Quartz
ApiBoot内部集成了Quartz,提供了数据库方式、内存方式的进行任务的存储,其中数据库方式提供了分布式集群任务调度,任务自动平滑切换执行节点。
引用ApiBoot Quartz在pom.xml配置文件内添加,如下配置:
org.minbox.framework api-boot-starter-quartz
备注:如果使用ApiBoot Quartz的内存方式,仅需要添加上面的依赖即可。相关配置
参数名称 | 是否必填 | 默认值 | 描述 |
---|---|---|---|
api.boot.quartz.job-store-type | 否 | memory | 任务存储源方式,默认内存方式 |
api.boot.quartz.scheduler-name | 否 | scheduler | 调度器名称 |
api.boot.quartz.auto-startup | 否 | true | 初始化后是否自动启动调度程序 |
api.boot.quartz.startup-delay | 否 | 0 | 初始化完成后启动调度程序的延迟。 |
api.boot.quartz.wait-for-jobs-to-complete-on-shutdown | 否 | false | 是否等待正在运行的作业在关闭时完成。 |
api.boot.quartz.overwrite-existing-jobs | 否 | false | 配置的作业是否应覆盖现有的作业定义。 |
api.boot.quartz.properties | 否 | Quartz自定义的配置属性,具体参考quartz配置 | |
api.boot.quartz.jdbc | 否 | 配置数据库方式的Jdbc相关配置 |
ApiBoot Quartz在使用内存方式存储任务时,不需要做配置调整。
数据库方式需要在application.yml配置文件内修改api.boot.quartz.job-store-type参数,如下所示:
api: boot: quartz: # Jdbc方式 job-store-type: jdbcQuartz所需表结构
Quartz的数据库方式内部通过DataSource获取数据库连接对象来进行操作数据,所操作数据表的表结构是固定的,ApiBoot把Quartz所支持的所有表结构都进行了整理,访问Quartz支持数据库建表语句列表查看,复制执行对应数据库语句即可。
创建任务类我们只需要让新建类集成QuartzJobBean就可以完成创建一个任务类,如下简单示例:
/** * 任务定义示例 * 与Quartz使用方法一致,ApiBoot只是在原生基础上进行扩展,不影响原生使用 *任务参数* 继承QuartzJobBean抽象类后会在项目启动时会自动加入Spring IOC * * @author:恒宇少年 - 于起宇 *
* 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); @Override protected 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 Quartz的newJob方法所创建的定时任务,如果在不传递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 Key,Job 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);
删除任务的顺序如下:
暂停触发器
移除触发器
删除任务
本章源码地址:https://github.com/hengboy/api-boot/tree/master/api-boot-samples/api-boot-sample-quartz
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74058.html
摘要:相关配置配置参数参数介绍默认值是否启用文档标题快速集成文档文档描述通过自动化配置快速集成文档,仅需一个注解一个依赖即可。注意通过所获取的类型都为。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选着性完成开箱即用, 不再为搭建接口框架而犯愁,从而极大...
摘要:如果全部使用默认值的情况话不需要做任何配置方式前提项目需要添加数据源依赖。获取通过获取启用在使用格式化时非常简单的,配置如下所示开启转换转换时所需加密,默认为恒宇少年于起宇默认不启用,签名建议进行更换。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选着性完成开箱即...
摘要:的短信服务模块是由阿里云的国际短信服务提供的,支持国内和国际快速发送验证码短信通知和推广短信。前提需要到阿里云控制台申请开通短信服务。如果在阿里云控制台定义的短信模板存在多个参数,可以通过方法来进行挨个添加,该方法返回值为本对象。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接...
摘要:如下所示不配置默认使用自定义是的概念,用于自定义转换实现,比如自定义格式化日期自动截取小数点等。下面提供一个的简单示例,具体的使用请参考官方文档。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选着性完成开箱即用, 不再为搭建接口框架而犯愁,从而极大...
摘要:添加快速集成的对象存储服务,提供常用的文件操作方法,当然也提供自定义扩展,以致于满足绝大数业务场景,并且通过扩展可以实现上传文件进度条下载文件进度条存储空间操作静态网站托管访问日志防盗链分片上传追加上传断点续传等等。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选...
阅读 869·2021-11-15 11:38
阅读 2480·2021-09-08 09:45
阅读 2792·2021-09-04 16:48
阅读 2536·2019-08-30 15:54
阅读 911·2019-08-30 13:57
阅读 1591·2019-08-29 15:39
阅读 479·2019-08-29 12:46
阅读 3458·2019-08-26 13:39