如何在quartz中运行时动态创建 job?

如何在quartz中运行时动态创建 job?,第1张

使用SimpleTriggerSimpleTrigger拥有多个重载的构造函数,用以在不同场合下构造出对应的实例:●SimpleTrigger(String name, String group):通过该构造函数指定Trigger所属组和名称;●SimpleTrigger(String name, String group, Date startTime):除指定Trigger所属组和名称外,还可以指定触发的开发时间;●SimpleTrigger(String name, String group, Date startTime, Date endTime, int repeatCount, long repeatInterval):除指定以上信息外,还可以指定结束时间、重复执行次数、时间间隔等参数;●SimpleTrigger(String name, String group, String jobName, String jobGroup, Date startTime, Date endTime, int repeatCount, long repeatInterval):这是最复杂的一个构造函数,在指定触发参数的同时,还通过jobGroup和jobName,让该Trigger和Scheduler中的某个任务关联起来。

quartz 和 xxl-job 都是任务调度框架,任务调度相关功能都可以借助这两个框架实现。

任务调度指在将来某个特定的时间、固定的时间周期或规律变化的时间周期到达时自动调度并执行指定的任务。

这两个框架都通过自己的方式实现了这个功能,区别在于对任务的创建、修改、删除、触发以及监控的 *** 作成本上,quartz 对于这些 *** 作直接提供了 api,这意味着开发人员拥有最大的 *** 作权,也带来了更高的灵活性,然而对于不需要很高灵活性的系统,或调度任务的 *** 控由非开发人员负责的系统,需要额外对 api 调用做一层封装,隔离 api *** 作;而 xxl-job 提供这些控制的方式是提供了一个单独的可视化调度中心,这意味着任务的状态控制可以和系统分离,通过更易 *** 作的网页界面的形式,降低了对 *** 控者的门槛。

quartz 有四个重要的组件,使用前需要先了解他们。

参考: Quartz 入门详解

1. Scheduler

代表一个 Quartz 的独立运行容器,Scheduler 将 Trigger 绑定到特定 JobDetail, 这样当 Trigger 触发时, 对应的 Job 就会被调度。

2. Trigger

描述 Job 执行的时间触发规则。主要有 SimpleTrigger 和 CronTrigger 两个子类,通过一个 TriggerKey 唯一标识。

3. Job

定义一个任务,规定了任务是执行时的行为。JobExecutionContext 提供了调度器的上下文信息,Job 的数据可从 JobDataMap 中获取。

3. JobDetail

Quartz 在每次执行 Job 时,都重新创建一个 Job 实例,所以它不直接接受一个 Job 的实例,相反它接收一个 Job 实现类。描述 Job 的实现类及其它相关的静态信息,如 Job 名字、描述等。

添加一个任务到 quartz 容器中

ScheduleJob

暂停、恢复、删除一个任务只需调用 Scheduler 的对应方法即可。

CronTrigger 相比 SimpleTrigger 提供了更灵活的调度规则,cron 表达式的知识可参考 cron 表达式详解 。

在线 cron 表达式生成器

Job 实现类

tip:Job 实现类需要用 public 修饰,即不能是内部类。

InitializingBean#afterPropertiesSet 中启动调度器

调度后的控制台日志

demo 为 spring boot 项目,已上传 GitHub ,你可以在 这里 找到。

jdk 1.8

spring boot 集成了 quartz

使用 了 lombok 框架的以下注解:

xxl-job 的分析见下篇 博文


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11808133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存