【Java】Elastic Job从入门到入门

Elastic Job 是一个适合高吞吐量的分布式任务调度解决方案。

ElasticJob 通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。

环境准备

# 下载并解压
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar -xvf apache-zookeeper-3.7.1-bin.tar.gz
# 配置基础参数 # application.properties zookeeper.address=127.0.0.1:2181 zookeeper.sessionTimeout=5000 
cd conf
cp zoo_sample.cfg zoo.cfg
# 启动服务 ,windows 在直接双击zKserver.cmd
./bin/zkServer.sh start 

  • JDK 11 + (推荐17)
  • Maven3.8 +

项目集成

在此之前,需要运行zookeeper

以SpringBoot为例,项目集成步骤如下。

  1. xml文件,添加Maven项目依赖。

    <!-- Zookeeper客户端-->
    <dependency>
    	<groupId>org.apache.curator</groupId>
    	<artifactId>curator-recipes</artifactId>
    	<version>5.1.0</version>
    </dependency>
    <!-- ElasticJob核心依赖-->
    <dependency>
    	<groupId>org.apache.shardingsphere.elasticjob</groupId>
    	<artifactId>elasticjob-lite-spring-boot-starter</artifactId>
    	<version>3.0.4</version>
    </dependency>
    
  2. 改yaml。配置zooker连接。

    elasticjob:
      zookeeper:
        server-lists: 127.0.0.1:2181  # Zookeeper地址
        namespace: elasticjob-demo  # 命名空间
      tracing:
        type: RDB   # 执行日志存储方式
    
  3. 开发第一个分片任务。

    实现MyJob,编写任务逻辑。

    @Component
    public class MyJob implements SimpleJob {
        @Override
        public void execute(ShardingContext shardingContext) {
            // 获取单枪分片信息
            int shardIndex = shardingContext.getShardingItem();
            int totalShards = shardingContext.getShardingTotalCount();
            System.out.println("[分片信息]:" + shardIndex + "/" + totalShards + " [时间]:" + LocalDateTime.now());
        }
    }
    

    在配置人中定义调度规则:

    @Configuration
    public class JobConfig {
        @Bean
        public JobConfiguration myJobConfig() {
            return JobConfiguration
                    .newBuilder("myShardingJob", 3)     // 任务名称,分片数量
                    .cron("0/10 * * * * ?")     // cron表达式,10秒执行一次
                    .shardingItemParameters("0=北京,1=上海,2=广州")   // 分片参数(可选)
                    .failover(true) // 失败自动恢复,默认为false
                    .monitorExecution(true) // 监控任务执行,默认为true
                    .build();
        }
    }
    

    运行后,控制台输出示例:

    分片1/3:处理数据ID%3=0的数据  
    分片2/3:处理数据ID%3=1的数据  
    分片3/3:处理数据ID%3=2的数据
    
posted @ 2025-03-19 15:23  陆陆无为而治者  阅读(39)  评论(0)    收藏  举报