快速入門Elastic-Job


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.參考

  傳送門


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM