快速入门Elastic-Job

0.前言

  本案例基于springboot 1.5.9

1.maven依赖

 1 <dependency>
 2    <groupId>com.dangdang</groupId>
 3    <artifactId>elastic-job-lite-core</artifactId>
 4    <version>2.1.5</version>
 5 </dependency>
 7 <dependency>
 8    <groupId>org.apache.curator</groupId>
 9    <artifactId>curator-client</artifactId>
10    <version>2.11.1</version>
11 </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; 9 import org.springframework.boot.CommandLineRunner;
 8 import org.springframework.context.annotation.Bean;
 9 import org.springframework.context.annotation.Configuration;
10 
11 @Configuration
12 public class ElasticJobConfig {
13     private static CoordinatorRegistryCenter createRegistryCenter() {
14         //多点
15         //CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("ip1:port1,ip2:port2,ip3:port3", "elastic-job-demo"));
16         //单点
17         CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("127.0.0.1", "elastic-job-demo"));//(String serverLists, String namespace)
18         regCenter.init();
19         return regCenter;
20     }
21     private static LiteJobConfiguration createJobConfiguration() {
22         //定义作业核心配置,这里设置总片数为 3(若要修改总片数,需要删除 zookeeper 之前的节点,或者改变上面的 namespace 否则不会立即生效)
23         JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder("myJobName", "0/5 * * * * ?", 5).shardingItemParameters("0=a,1=b,2=c").build();
24         //定义作业 SIMPLE 类型配置
25         SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, MyElasticJob.class.getCanonicalName());
26         //定义作业 Lite 根配置
27         LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
28         return simpleJobRootConfig;
29     }
30     @Bean
31     public CommandLineRunner commandLineRunner() {//CommandLineRunner 里面的方法在应用启动后执行 
32         return (String... args) -> {
33             new JobScheduler(createRegistryCenter(), createJobConfiguration()).init();
34         };
35     }
36 }
 
  
 
 

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.参考: 传送门

猜你喜欢

转载自www.cnblogs.com/wangliangwu/p/9994943.html
今日推荐