最近需求做一个易扩展,高可用,负载均衡的分布式任务调度器参考了网上的很多帖子和文章.遗憾的是没有找到一个可以跑起来实例,下面是我调整总结可以跑起来的实例.在这里记录下.
系统特点也是Quertz的特点,支持水平扩展,通俗的说就是可以部署多个服务节点/不存在任务重复执行的情况/一个任务节点宕机后其他节点的任务可以照常继续执行.不说废话了,直接上代码.
ToGitHub
Quartz分布式集群方案
- Scheduler表
1 | DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; |
- maven配置
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
- quartz.properties配置
1 | #用在 JDBC JobStore 中来唯一标识实例,但是所有集群节点中必须相同 |
- spring文件配置<application-scheduler.xml>
1 | <?xml version="1.0" encoding="UTF-8"?> |
- app.properties配置
1 | #scheduler延时启动 |
- jdbc.properties配置
1 | jdbc.username= |
- ApplicationStart启动类
1 | package com.schedulers.main; |
- HelloWordService服务类
1 | package com.schedulers.service; |
- MyJobHello-job类
1 | package com.schedulers.job; |
这个程序我已经测试过了,部署了两个节点.两个节点同时只有一个节点在跑任务.因为为了更直观的看测试结果所以我就启动了一个job.
注意job同步到数据库之后,再次运行程序的时候任务主要就依赖数据库中的记录了.