因为公司产品涉及到定时调度方面的需求,所以又在详细的了解一遍quartz这个任务调度框架.
阿里新一代分布式任务调度平台Schedulerx2.0还未开源,所以先从quartz开始,后续有资源了在开始调研.
最新的稳定版本是2.3.0
持久化
JDBCJobStore几乎与任何数据库一起使用,已被广泛应用于Oracle,PostgreSQL,MySQL,MS SQLServer,HSQLDB和DB2。要使用JDBCJobStore,必须首先创建一组数据库表以供Quartz使用。您可以在Quartz发行版的“docs / dbTables”目录中找到表创建SQL脚本。如果您的数据库类型尚未有脚本,请查看其中一个脚本,然后以数据库所需的任何方式进行修改。需要注意的一点是,在这些脚本中,所有的表都以前缀“QRTZ_”开始(如表“QRTZ_TRIGGERS”和“QRTZ_JOB_DETAIL”)。只要你通知JDBCJobStore前缀是什么(在你的Quartz属性中),这个前缀实际上可以是你想要的。对于多个调度程序实例,使用不同的前缀可能有助于创建多组表
集群
通过数据库,和redis分布式锁或者zkooper实现分布式任务调度.
Quartz API的关键接口是:
-
Scheduler - 与调度程序交互的主要API。
-
Job - 你想要调度器执行的任务组件需要实现的接口
-
JobDetail - 用于定义作业的实例。(描述job,以及记录job).
-
Trigger(即触发器) - 定义执行给定作业的计划的组件。
-
JobBuilder - 用于定义/构建 JobDetail 实例,用于定义作业的实例。
-
TriggerBuilder - 用于定义/构建触发器实例。
-
Scheduler 的生命期,从 SchedulerFactory 创建它时开始,到 Scheduler 调用shutdown() 方法时结束;Scheduler 被创建后,可以增加、删除和列举 Job 和 Trigger,以及执行其它与调度相关的操作(如暂停 Trigger)。但是,Scheduler 只有在调用 start() 方法后,才会真正地触发 trigger(即执行 job)
springboot 集成 quart
springboot 2.0 之前需要通过quartz.properties配置,之后springboot已经将quartz集成了只需要在yaml中配置即可.
quartz: job-store-type: jdbc properties: org: quartz: jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX clusterCheckinInterval: 10000 driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate isClustered: true tablePrefix: QRTZ_ useProperties: false scheduler: instanceId: AUTO instanceName: clusteredScheduler threadPool: class: org.quartz.simpl.SimpleThreadPool threadCount: 10 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true