一、什么是ElasticJob
ElasticJob
是一个轻量的、无中心化的分布式定时任务解决方案。
二、ElasticJob有何特点
1.无中心化
ElasticJob
的特点是没有一个固定的主服务器。而是所有服务器都可以通过选举成为主服务器,当主服务器宕机时,重新选举出一个新的主服务器。因此不用担心主服务器宕机后导致其他服务器的业务停止的情况。
2.弹性调度
ElasticJob
有任务分片的概念,可以将任务分成多片,然后在分布式环境下运行,每台任务服务器实际只运行分配给该服务器的分片。随着服务器的增加或宕机,ElasticJob
会近乎实时的感知服务器数量的变更,从而重新为分布式的任务服务器分配更加合理的任务分片项,使得任务可以随着资源的增加而提升效率。
3.失效转移
开启失效转移功能后。当作业执行过程中服务器宕机,失效转移允许将该次未完成的任务在另一作业节点上补偿执行。
4.错过任务重执行
ElasticJob
不允许作业在同一时间内叠加执行。 当作业的执行时长超过其运行间隔,错过任务重执行能够保证作业在完成上次的任务后继续执行逾期的作业。
三、入门Demo
如果你已经有一个SpringBoot
集成的项目和zookeeper
环境,那么你可以非常快速的给你的项目集成Elasticjob
。
1.环境要求
Java 8及以上版本
Maven 3.5.0及以上版本
ZooKeeper 3.6.0及以上版本
2.添加依赖
给你的项目添加elasticjob-lite-spring-boot-starter
依赖
<dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-lite-spring-boot-starter</artifactId><version>3.0.0</version>
</dependency>
3.作业开发
然后直接就可以开始你的定时任务开发了!
package org.example.job;import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
import org.springframework.stereotype.Component;@Component
public class HelloWorldJob implements SimpleJob {@Overridepublic void execute(ShardingContext shardingContext) {System.out.println("执行定时任务");}
}
配置
elasticjob:regCenter:#zk地址和端口号serverLists: xxx.xxx.xxx.xxx:xxxxnamespace: hello-world-elasticjob# 等待重试的间隔时间的初始值 单位:毫秒base-sleep-time-milliseconds: 10000# 等待重试的间隔时间的最大值max-sleep-time-milliseconds: 30000# 最大重试次数max-retries: 3# 会话超时时间 单位: 毫秒session-timeout-milliseconds: 600000# 连接超时时间 单位: 毫秒connection-timeout-milliseconds: 600000jobs:#任务名称HelloWorldJob:elasticJobClass: org.example.job.HelloWorldJobcron: 0/5 * * * * ?#分片数量shardingTotalCount: 1
附上官方文档地址:
ElasticJob官方文档