plugin-quartz
基于quartz分布式定时计划任务插件,即插即用
脚本目录:src/main/db/
#功能支持
- 高可用:
- 集群系统保证单机执行计划任务
- 执行任务机器不可用后自动切换机器
- 负载均衡:
设计思路:使用分布式服务发现组件实现分布式集群负载均衡
例如有(A、B)、(C、D)2个分布式集群系统
A、B: 集成plugin-quartz插件,作为分布式系统计划任务API,调用C、D系统的服务执行计划任务逻辑
C、D: 实现任务业务逻辑
#依赖框架及版本
- spring-boot-1.5.9.RELEASE
- quartz-2.2.3
- quartz-jobs-2.2.3
#数据库版本
- mysql-5.7.21
#使用方法
- 项目直接引入plugin-quartz插件依赖
- 计划任务类继承以下两个抽象类(根据实际业务情况二选一)并实现execute(JobDataMap jobDataMap)和setParamsList(List list)方法即可
1.BaseStatefulTask:(标记有状态job基类,同一任务不会同时执行多个job实例)
2.BaseStatelessTask:(标记无状态job基类,同一任务会同时执行多个job实例)
3.method execute: 定制开发计划任务逻辑实现
4.method setParamsList: 设置计划任务参数,可以在execute方法中拿到参数,主要用于手动执行计划任务使用- 配置项
quartz:
defaultJobcron: 0 0 0 1 * ? //默认初始化计划任务的运行时间
defaultGroupName: taskGroup //默认的计划任务组名
#重要类介绍
- AbstractBaseTask: 计划任务实现核心类,并增加了运行日志记录
- AutowireTask: 用于启动扫描所有继承BaseTask的子类,并初始化计划任务信息到quartz相关表中
- QuartzController: 提供api接口用于通过页面对计划任务做实时CRU操作
#存在问题
- 计划任务运行日志目前不支持分库分表,日志量会非常大
#优化改进
- 针对日志问题的分库分表方案:
- 提供基于sharding-jdbc的分库分表支持.----侵入性比较强
- 基于mycat实现日志表(qrtz_exe_log)分库分表.----无侵入性
- 欢迎giter们提供更多更好的点子来共同改进插件.
#代码地址