实现elastic-job分布式调度框架的spring boot自动装载
背景
- 每个复杂的项目都存在大量重要的定时调度任务,引入一个好用的分布式调度任务框架是非常重要的。elastic job是当当网开源的基于quartz的分布式调度框架,通过zookeeper实现分布式协调,加上支持分片、日志追踪、任务管理UI、高可性被大家熟知。
- 目前新的项目基本都是spring boot,如何通过约束、配置方式快速构建elastic job是一个必要解决问题 ;所以博主自己开发了一个elastic job 的spring boot starter自动装载模块;目前该starter已经在公司多个项目生产环境运行。研发只需关注实现job和在application.yml增加相应配置即可。
运行环境
1.JDK1.8
2.MAVEN3.3+
3.Spring boot 2.1.17.RELEASE
4.Zookeeper 3.4.6
源代码下载
https://download.youkuaiyun.com/download/m0_38138879/19421275
第三方依赖关系
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-core</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-spring</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.10.0</version> </dependency> </dependencies>
核心配置代码
1.绑定注册中心配置信息的POJO
package cn.hrs.tools.spring.elasticjob.properties;
import lombok.Data;
/**
* @author huangrusheng
* @version 1.0
* @date 2021/6/6 11:04
*/
@Data
public class ZookeeperRegistryCenterProperties {
/**
* 连接Zookeeper服务器的列表.
* 包括IP地址和端口号.
* 多个地址用逗号分隔.
* 如: host1:2181,host2:2181
*/
private String serverLists;
/**
* 命名空间.
*/
private String namespace;
/**
* 等待重试的间隔时间的初始值.
* 单位毫秒.
*/
private int baseSleepTimeMilliseconds = 1000;
/**
* 等待重试的间隔时间的最大值.
* 单位毫秒.
*/
private int maxSleepTimeMilliseconds = 3000;
/**
* 最大重试次数.
*/
private int maxRetries = 3;
/**
* 会话超时时间.
* 单位毫秒.
*/
private int sessionTimeoutMilliseconds;
/**
* 连接超时时间.
* 单位毫秒.
*/
private int connectionTimeoutMilliseconds;
/**
* 连接Zookeeper的权限令牌.
* 缺省为不需要权限验证.
*/
private String digest;
}
2.绑定调度任务配置的POJO
package cn