博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot使用Elastic-Job
阅读量:6236 次
发布时间:2019-06-22

本文共 5229 字,大约阅读时间需要 17 分钟。

本文介绍SpringBoot整合Elastic-Job分布式调度任务(简单任务)。

1.有关Elastic-Job

Elastic-Job是当当网开源的分布式任务调度解决方案,是业内使用较多的分布式调度解决方案。

这里主要介绍Elastic-Job-Lite,Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供最轻量级的分布式任务的协调服务,外部依赖仅Zookeeper。

架构图如下:

Elastic-Job官网地址:

Elastic-Job-Lite官方文档地址:

2.使用Elastic-Job

2.1 加入依赖

新建项目,在项目中加入Elastic-Job依赖,完整pom如代码清单所示。

4.0.0
org.springframework.boot
spring-boot-starter-parent
2.0.3.RELEASE
com.dalaoyang
springboot2_elasticjob
0.0.1-SNAPSHOT
springboot2_elasticjob
springboot2_elasticjob
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.dangdang
elastic-job-lite-core
2.1.5
com.dangdang
elastic-job-lite-spring
2.1.5
org.springframework.boot
spring-boot-maven-plugin
复制代码

2.2 配置文件

配置文件中需要配置一下zookeeper地址和namespace名称,注意:这个不是必须要配置的,在文件中直接写死也是可以的,配置文件如下所示。

spring.application.name=springboot2_elasticjobregCenter.serverList=localhost:2181regCenter.namespace=springboot2_elasticjob复制代码

2.3 配置zookeeper

接下来需要配置一下zookeeper,创建一个JobRegistryCenterConfig,内容如下:

@Configuration@ConditionalOnExpression("'${regCenter.serverList}'.length() > 0")public class JobRegistryCenterConfig {    @Bean(initMethod = "init")    public ZookeeperRegistryCenter regCenter(@Value("${regCenter.serverList}") final String serverList,                                             @Value("${regCenter.namespace}") final String namespace) {        return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));    }}复制代码

2.4 定义Elastic-Job任务

配置一个简单的任务,这里以在日志中打印一些参数为例,如下所示。

public class MySimpleJob implements SimpleJob {    Logger logger = LoggerFactory.getLogger(MySimpleJob.class);    @Override    public void execute(ShardingContext shardingContext) {        logger.info(String.format("Thread ID: %s, 作业分片总数: %s, " +                        "当前分片项: %s.当前参数: %s," +                        "作业名称: %s.作业自定义参数: %s"                ,                Thread.currentThread().getId(),                shardingContext.getShardingTotalCount(),                shardingContext.getShardingItem(),                shardingContext.getShardingParameter(),                shardingContext.getJobName(),                shardingContext.getJobParameter()        ));    }}复制代码

2.5 配置任务

配置任务的时候,这里定义了四个参数,分别是:

  • cron:cron表达式,用于控制作业触发时间。
  • shardingTotalCount:作业分片总数
  • shardingItemParameters:分片序列号和参数用等号分隔,多个键值对用逗号分隔 分片序列号从0开始,不可大于或等于作业分片总数 如: 0=a,1=b,2=c
  • jobParameters:作业自定义参数 作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业 例:每次获取的数据量、作业实例从数据库读取的主键等。

至于其他参数请参考文档,

本文配置如下:

@Configurationpublic class MyJobConfig {    private final String cron = "0/5 * * * * ?";    private final int shardingTotalCount = 3;    private final String shardingItemParameters = "0=A,1=B,2=C";    private final String jobParameters = "parameter";    @Autowired    private ZookeeperRegistryCenter regCenter;    @Bean    public SimpleJob stockJob() {        return new MySimpleJob();    }    @Bean(initMethod = "init")    public JobScheduler simpleJobScheduler(final SimpleJob simpleJob) {        return new SpringJobScheduler(simpleJob, regCenter, getLiteJobConfiguration(simpleJob.getClass(),                cron, shardingTotalCount, shardingItemParameters, jobParameters));    }    private LiteJobConfiguration getLiteJobConfiguration(final Class
jobClass, final String cron, final int shardingTotalCount, final String shardingItemParameters, final String jobParameters) { // 定义作业核心配置 JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(jobClass.getName(), cron, shardingTotalCount). shardingItemParameters(shardingItemParameters).jobParameter(jobParameters).build(); // 定义SIMPLE类型配置 SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, jobClass.getCanonicalName()); // 定义Lite作业根配置 LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).overwrite(true).build(); return simpleJobRootConfig; }}复制代码

3.测试

启动项目,就可以看到控制台的输出了,如下所示:

4.源码

源码地址:

转载于:https://juejin.im/post/5c7e8c785188251ba95ce239

你可能感兴趣的文章
【日常管理】Asm Diskgroup增加磁盘add disk
查看>>
Exadata下新建DiskGroup
查看>>
了解ocssd.bin如何控制RAC节点重启
查看>>
CentOS学习笔记 - 8. docker 编译基于gofabric8的java应用镜像
查看>>
关于ps cs6的滤镜 (抽出)
查看>>
项目版本管理(TFS)删除项目
查看>>
modprobe
查看>>
AQS实现原理及成果(有图有真相)
查看>>
js操作cookie
查看>>
access数据库注入
查看>>
MySQL + Atlas --- 部署读写分离
查看>>
Zabbix 2.2 LTS升级到Zabbix 3.0 LTS
查看>>
TortoiseSVN的使用
查看>>
数据分页时每页首条记录索引如何计算
查看>>
CSICO 常见操作命令
查看>>
sql中两个时间类型相减得到的值
查看>>
FastDFS安装配置
查看>>
Python格式化输出的四种方法
查看>>
TypeScript入门
查看>>
记一次安装新版jre
查看>>