千家信息网

Elastic Job 入门

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Elastic job是当当网架构师张亮,曹昊和江树建基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的弊端。Elastic job主要的功能
千家信息网最后更新 2026年11月02日Elastic Job 入门

Elastic job是当当网架构师张亮,曹昊和江树建基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的弊端。Elastic job主要的功能有支持弹性扩容,通过Zookepper集中管理和监控job,支持失效转移等,这些都是Quartz等其他定时任务无法比拟的。


目前Elastic job的最新版本已经由原来的elastic-job-core分离除了两个项目,分别为Elastic-Job-Lite和Elastic-Job-Cloud。Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成,Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。 Elastic-Job-Cloud使用Mesos + Docker(TBD)的解决方案,额外提供资源治理、应用分发以及进程隔离等服务,Elastic-Job-Lite和Elastic-Job-Cloud提供同一套API开发作业,开发者仅需一次开发,即可根据需要以Lite或Cloud的方式部署


开头copy 网上一段术语,讲解的很清晰。总结就是:elastic job 是用来实现 分布式的定时任务,比如说定时任务项目,部署在2台,但是只需要执行一次,而又想保持2台服务器代码都一致,这时候elasitc job 可以很完美的解决问题,当然使用的是zookeeper的相关特性。


1.实战

项目目录如下


1.pom.xml


新建maven项目,引入springboot的相关jar包

再引入elastic job 的相关核心包 elastic-job-core,elastic-job-spring



  4.0.0  com.xj  el  0.0.1-SNAPSHOT  jar  el  http://maven.apache.org      UTF-8           org.springframework.boot        spring-boot-starter-parent        1.4.0.RELEASE                junit      junit      3.8.1      test                     org.springframework.boot      spring-boot-starter-web                     com.dangdang   elastic-job-core   1.1.1             com.dangdang   elastic-job-spring   1.1.1                          org.springframework.boot        spring-boot-maven-plugin                  


2.reg.properties

存放zookeeper 配置中心的相关配置信息

serverLists=10.3.142.107:2181,10.3.142.107:2182,106.3.14.107:2183namespace=elastic-job-examplebaseSleepTimeMilliseconds=1000maxSleepTimeMilliseconds=3000maxRetries=3


3.withNamespace.xml

存放作业的相关详情,这里测试存放了 simple 与dataFlow 2中情况。

                                                       



elastic-job提供了三种类型的作业:Simple类型作业、Dataflow类型作业、Script类型作业。这里主要讲解前两者。Script类型作业意为脚本类型作业,支持shell,python,perl等所有类型脚本,使用不多,可以参见github文档。

SimpleJob需要实现SimpleJob接口,意为简单实现,未经过任何封装,与quartz原生接口相似,比如示例代码中所使用的job。

Dataflow类型用于处理数据流,需实现DataflowJob接口。该接口提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)数据。
可通过DataflowJobConfiguration配置是否流式处理。
流式处理数据只有fetchData方法的返回值为null或集合长度为空时,作业才停止抓取,否则作业将一直运行下去; 非流式处理数据则只会在每次作业执行过程中执行一次fetchData方法和processData方法,随即完成本次作业。
实际开发中,Dataflow类型的job还是很有好用的。



4.MySimpleJob.java

package com.xj.el;import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingContext;import com.dangdang.ddframe.job.plugin.job.type.simple.AbstractSimpleElasticJob;public class MySimpleJob extends AbstractSimpleElasticJob{        @Override        public void process(JobExecutionMultipleShardingContext shardingContext) {                  System.out.println(String.format("------Thread ID: %s, 任务总片数: %s, 当前分片项: %s",                   Thread.currentThread().getId(), shardingContext.getShardingTotalCount(), shardingContext.getShardingItems()));          }       }


5.MyThroughputDataFlowElasticJob.java

package com.xj.el;import java.sql.Time;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingContext;import com.dangdang.ddframe.job.internal.job.AbstractJobExecutionShardingContext;import com.dangdang.ddframe.job.plugin.job.type.dataflow.AbstractIndividualThroughputDataFlowElasticJob;public class MyThroughputDataFlowElasticJob extends AbstractIndividualThroughputDataFlowElasticJob{                        public List fetchData(JobExecutionMultipleShardingContext shardingContext) {                List testBeanList = new ArrayList();             //获取testBean的相关数据                return testBeanList;        }                public boolean processData(JobExecutionMultipleShardingContext shardingContext, TestBean data) {                //处理上文testBean的相关数据                return false;        }        }


6.springboot 测试主类 SpringBootSampleApplication.java

package com.xj.el;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.context.annotation.ImportResource;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * Hello world! * */@RestController@EnableAutoConfiguration@ImportResource(locations = {"classpath:withNamespace.xml"})public class SpringBootSampleApplication {         public static void main(String[] args) {                SpringApplication.run(SpringBootSampleApplication.class, args);            }                          @RequestMapping("/")    String home() {        return "Hello World!";    }}




作业 类型 任务 数据 处理 分布式 开发 接口 方法 项目 支持 方案 解决方案 服务 配置 两个 代码 意为 脚本 测试 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 广东万易互联网科技有限公司惠州分公司 云之行互联网科技 互联网科技与金融科技 互联网络科技有限公司 互联网科技媒体 南京欣网互联网科技 电子科技大学互联网 有木互联网科技 伴你行互联网科技有限公司 互联网前沿科技 滨湖区互联网智能科技产品供应 欧洲十大科技互联网公司 昊天互联网科技有限公司 互联网科技商业 新兴科技互联网创新大赛颁奖典礼 注册互联网科技公司经营范围大全 浙南科技城互联网大厦建设工程 科技互联网海报 恒生科技互联网指数十大成分股 中资互联网科技 世界互联网领先科技成果 滨湖区互联网智能科技产品供应 恒生科技互联网指数分析 上海电发互联网科技有限公司 受益于互联网科技的高速发展 知域互联网科技有限公司大骗子 亳州好赞互联网科技有限公司 神州科技互联网有限公司 马化腾互联网科技教学
0