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的方式部署 .[转自官网:https://github.com/dangdangdotcom/elastic-job/blob/master/README_cn.md]
1.实战
maven依赖:
- <!-- 引入elastic-job-lite核心模块 -->
- <!-- https:
- <dependency>
- <groupId>com.dangdang</groupId>
- <artifactId>elastic-job-lite-core</artifactId>
- <version>2.0.0</version>
- </dependency>
- <!-- 使用springframework自定义命名空间时引入 -->
- <dependency>
- <groupId>com.dangdang</groupId>
- <artifactId>elastic-job-lite-spring</artifactId>
- <version>2.0.0</version>
- </dependency>
MyElasticJob.java
- package com.lance.job;
-
- import com.dangdang.ddframe.job.api.ShardingContext;
- import com.dangdang.ddframe.job.api.simple.SimpleJob;
-
-
-
-
- public class MyElasticJob implements SimpleJob {
-
-
- public void execute(ShardingContext shardingContext) {
-
-
-
-
-
-
-
-
-
-
- processByEndId(shardingContext.getShardingItem());
- }
-
- private void processByEndId(int shardingContext) {
-
-
-
- }
- }
上下文配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:reg="http://www.dangdang.com/schema/ddframe/reg"
- xmlns:job="http://www.dangdang.com/schema/ddframe/job"
- xsi:schemaLocation="http:
- http:
- http:
- http:
- http:
- http:
- ">
- <!--Zookeeper注册中心 -->
- <reg:zookeeper id="regCenter" server-lists="zookeeperServerIp:2181" namespace="dd-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" />
-
- <!-- 配置作业-->
- <job:simple id="myElasticJob" class="com.lance.job.MyElasticJob" registry-center-ref="regCenter" cron="0 */5 * * * ?" sharding-total-count="1"/>
- </beans>
看,简单吧!