0.前言
- 本案例基於springboot 1.5.9 和 Elastic-Job-Lite
- 官網地址
1.maven依賴
1 <dependency> 2 <groupId>com.dangdang</groupId> 3 <artifactId>elastic-job-lite-core</artifactId> 4 <version>2.1.5</version> 5 </dependency> 6 <dependency> 7 <groupId>org.apache.curator</groupId> 8 <artifactId>curator-client</artifactId> 9 <version>2.11.1</version> 10 </dependency>
2.配置類
1 import com.dangdang.ddframe.job.config.JobCoreConfiguration; 2 import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration; 3 import com.dangdang.ddframe.job.lite.api.JobScheduler; 4 import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration; 5 import com.dangdang.ddframe.job.reg.base.CoordinatorRegistryCenter; 6 import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration; 7 import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter; 8 import org.springframework.boot.CommandLineRunner; 9 import org.springframework.context.annotation.Bean; 10 import org.springframework.context.annotation.Configuration; 11 12 @Configuration 13 public class ElasticJobConfig { 14 private static CoordinatorRegistryCenter createRegistryCenter() { 15 //多點 16 //CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("ip1:port1,ip2:port2,ip3:port3", "elastic-job-demo")); 17 //單點 18 CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("127.0.0.1", "elastic-job-demo"));//(String serverLists, String namespace) 19 regCenter.init(); 20 return regCenter; 21 } 22 private static LiteJobConfiguration createJobConfiguration() { 23 //定義作業核心配置,這里設置總片數為 3(若要修改總片數,需要刪除 zookeeper 之前的節點,或者改變上面的 namespace 否則不會立即生效) 24 JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder("myJobName", "0/5 * * * * ?", 5).shardingItemParameters("0=a,1=b,2=c").build(); 25 //定義作業 SIMPLE 類型配置 26 SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, MyElasticJob.class.getCanonicalName()); 27 //定義作業 Lite 根配置 28 LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build(); 29 return simpleJobRootConfig; 30 } 31 @Bean 32 public CommandLineRunner commandLineRunner() {//CommandLineRunner 里面的方法在應用啟動后執行 33 return (String... args) -> { 34 new JobScheduler(createRegistryCenter(), createJobConfiguration()).init(); 35 }; 36 } 37 }
3.任務類
1 import com.dangdang.ddframe.job.api.ShardingContext; 2 import com.dangdang.ddframe.job.api.simple.SimpleJob; 3 4 public class MyElasticJob implements SimpleJob { 5 6 @Override 7 public void execute(ShardingContext shardingContext) { 8 System.out.println("總分片數: " + shardingContext.getShardingTotalCount()); 9 switch (shardingContext.getShardingItem()) { 10 case 0: { 11 System.err.println("當前分片" + shardingContext.getShardingItem()); 12 break; 13 } 14 case 1: { 15 System.err.println("當前分片" + shardingContext.getShardingItem()); 16 break; 17 } 18 case 2: { 19 System.err.println("當前分片" + shardingContext.getShardingItem()); 20 break; 21 } 22 default: { 23 System.out.println("MyElasticJob - default"); 24 } 25 } 26 } 27 }
4.測試
先啟動zookeeper,然后啟動應用即可
5.補充
可通過對數據的 id 對最大分片數進行取余,分配到各個分片上,從而以多線程的方式更快速地執行任務
6.參考