Springboot分布式定时任务ElasticJob-Lite3.0配置和整合Springboot 分布式定时任务 ElasticJob-Lite 3.0 配置和使⽤
ElasticJob⽤于解决springboot的定时任务 @EnableScheduling 集部署产⽣的冲突
本⽂基于yml配置⽂件和注解启动分布式定时任务
中⽂官⽅⽂档
版本依赖
JAVA
请使⽤ Java 8 及其以上版本。
Maven
请使⽤ Maven 3.5.0 及其以上版本。
ZooKeeper
请使⽤ ZooKeeper 3.6.0 及其以上版本。
控制台页⾯
3.0 以后使⽤全新的控制台页⾯
下载地址
使⽤⽅法
1.解压缩
// windows解压⼯具启动会报错,新版本win10可以直接使⽤tar命令
tar zxvf apache-shardingsphere-elasticjob-3.0.
2.改配置⽂件
登录等其他配置
控制台提供两种账户:管理员及访客。 管理员拥有全部操作权限,访客仅拥有察看权限。 默认管理员⽤户名和密码是 root/root,访客⽤户名和密码是 guest/guest,可通过 conf\application.properties 修改管理员及访客⽤户名及密码。
<_username=root
<_password=root
auth.guest_username=guest
auth.guest_password=guest
3.启动
bin\⽬录下的启动⽂件
windows运⾏start.bat
linux执⾏start.sh, 8899 为默认端⼝号,可通过启动脚本输⼊ -p ⾃定义端⼝号。
官⽅⽂档
Springboot整合ElasticJob-Lite
POM⽂件引⼊依赖
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-lite-core</artifactId>
<version>3.0.1</version>
</dependency>
// 后⾯基于yml配置需要starter
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-lite-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
针对spring-boot-starter-parent版本(1.x)较低的,需要指定curator的版本
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.1.0</version>
</dependency>
【作业开发】编写定时任务(job)
基于yml配置⽂件启动的必须注解@Component,执⾏业务时也需要⾃动注⼊
@Slf4j
@Component
public class TestJob implements SimpleJob {
@Override
public void execute(ShardingContext shardingContext) {
log.info("TestJob开始作业: {}", shardingContext);
// 不分⽚时将分⽚数设为1,直接在此写业务代码
// 多分⽚时
switch (ShardingItem()) {
case 0:
log.info("TestJob第⼀个分⽚,参数: {}", ShardingParameter());
break;
case 1:
log.info("TestJob第⼆个分⽚,参数: {}", ShardingParameter());
break;
// ..........
}
}
}
更多作业类型参考官⽅⽂档
【作业】
在多个分⽚的情况,在每个分⽚执⾏完后要进⾏⼀个数据汇总,这时可以使⽤
yml⽂件配置
⽤⼀个yml⽂件去专门管理当前服务的job,利⽤spring.profiles.include=job引⼊l配置⽂件
配置Zookeeper
elasticjob:
reg-center:
server-lists: localhost:2181
namespace: demo
配置job
elasticjob:
springboot中文
jobs:
testJob: #⾃定义名称
elasticJobClass: ample.demo.job.TestJob #类名
cron: 0/5 * * * * ? #运⾏cron
sharding-total-count: 1 #总分⽚数
shardingItemParameters: 0=TestJob #分⽚参数
全部yml配置
spring:
application:
name: demo
profiles:
active: dev
include: job
server:
port: 8232
spring:
redis:
database: 2
host: 127.0.0.1
port: 6379
elasticjob:
reg-center:
server-lists: 127.0.0.1:2181
namespace: demo
elasticjob:
jobs:
testJob:
elasticJobClass: ample.demo.job.TestJob
cron: 0/5 * * * * ?
sharding-total-count: 1
shardingItemParameters: 0=TestJob
demoJob:
elasticJobClass: ample.demo.job.DemoJob
cron: 0/5 * * * * ?
sharding-total-count: 1
shardingItemParameters: 0=DemoJob
运⾏结果
实例1运⾏分⽚为1的DemoJob和分⽚为2的TestJob第⼀个分⽚
实例2运⾏分⽚为2的TestJob第⼆个分⽚
实例1
DemoJob开始作业: ShardingContext(jobName=demoJob, taskId=demoJob@-@0@-@READY@-@
172.26.112.1@-@24164, shardingTotalCount=1, jobPa rameter=, shardingItem=0, shardingParameter=DemoJob)
TestJob开始作业: ShardingContext(jobName=testJob, taskId=testJob@-@0@-@READY@-@172.26.112.1@-@24164, shardingTotalCount=2, jobParamet er=, shardingItem=0, shardingParameter=CPU)
TestJob第⼀个分⽚,参数: CPU
实例2
TestJob开始作业: ShardingContext(jobName=testJob, taskId=testJob@-@1@-@READY@-@172.26.112.1@-@17112, shardingTotalCount=2, jobParamet er=, shardingItem=1, shardingParameter=内存)
TestJob第⼆个分⽚,参数: 内存