Quartz使用了一个随机的负载均衡算法, Job以随机的方式由不同的实例执行。Quartz官网上提到当前,还不存在一个方法来指派(钉住) 一个 Job 到集群中特定的节点。
以下以分区方式实现:
1.1 场景描述
n 多活集群下指定定时任务在某一个(多个)节点执行
n 多活集群下指定某一个(多个)节点不参与定时任务执行
2 解决方案
2.1 配置文件
classpath/quartz.properties
2.2 配置参数
org.quartz.jobStore.tablePrefix
该参数为配置集群任务表表名前缀,应用会通过该参数来检查对应任务表中是否有待执行任务。该参数为重要参数。
2.3 数据库表
2.4 新增任务
n 访问需要执行该定时任务节点,在任务管理功能项下新增
n SQL脚本方式新增
2.5 应用实列
- 现有应用架构为6活双中心应用,要求所有定时任务只在业务区A执行,业务区B不参与定时任务执行,配置如下:
(业务区A)
(业务区B)
- 数据库表要求,业务区A任务相关表名需要以 A_QRTZ_为前缀
业务区B任务相关表名需要以 B_QRTZ_为前缀