ElasticJob Spring Boot Starter 使用指南

ElasticJob Spring Boot Starter 使用指南

shardingsphere-elasticjob Distributed scheduled job shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/el/elastic-job

概述

ElasticJob 是一款分布式调度解决方案,提供了与 Spring Boot 集成的 Starter 模块。通过 ElasticJob Spring Boot Starter,开发者可以快速地将分布式调度能力集成到 Spring Boot 应用中,无需手动配置注册中心和作业启动器,只需关注业务逻辑的实现和少量配置即可。

核心概念

作业类型

ElasticJob 支持三种作业类型:

  1. SimpleJob:简单作业,每次执行时只执行一次业务逻辑
  2. DataflowJob:数据流作业,包含数据抓取(fetchData)和数据处理(processData)两个阶段
  3. ScriptJob:脚本作业,直接执行系统命令或脚本文件

快速开始

1. 实现 ElasticJob 作业

以 DataflowJob 为例,创建一个 Spring Bean:

@Component
@Scope("prototype") // 建议设置为原型模式
public class SpringBootDataflowJob implements DataflowJob<Foo> {
    
    @Override
    public List<Foo> fetchData(ShardingContext shardingContext) {
        // 根据分片参数获取数据
        return fetchDataBySharding(shardingContext.getShardingItem());
    }
    
    @Override
    public void processData(ShardingContext shardingContext, List<Foo> data) {
        // 处理获取到的数据
        data.forEach(this::processItem);
    }
}

注意:默认情况下 Spring Bean 是单例的,如果作业实例会被多个 JobBootstrap 使用,建议将 Bean 的作用域设置为 prototype。

2. 配置注册中心和作业

在 application.yml 中配置:

elasticjob:
  regCenter:
    serverLists: localhost:6181  # ZooKeeper 地址
    namespace: elasticjob-demo  # 命名空间
  jobs:
    myDataflowJob:
      elasticJobClass: com.example.SpringBootDataflowJob  # 作业实现类
      cron: 0/5 * * * * ?      # 定时表达式
      shardingTotalCount: 3     # 分片总数
      shardingItemParameters: 0=北京,1=上海,2=广州  # 分片参数
    myScriptJob:
      elasticJobType: SCRIPT    # 脚本作业类型
      cron: 0/10 * * * * ?     # 每10秒执行一次
      shardingTotalCount: 1    # 单分片
      props:
        script.command.line: "echo Hello ElasticJob"  # 执行的脚本命令

作业启动方式

定时调度作业

定时调度作业会在 Spring Boot 应用启动后自动开始调度,无需额外操作。

一次性作业

一次性作业需要手动触发执行,可以通过注入 JobBootstrap 来调用:

@RestController
public class JobController {
    
    @Resource(name = "myOneTimeJobBean")
    private OneOffJobBootstrap myOneTimeJob;
    
    @GetMapping("/trigger-job")
    public String triggerJob() {
        myOneTimeJob.execute();
        return "Job triggered successfully";
    }
}

配置文件中需要指定 jobBootstrapBeanName:

elasticjob:
  jobs:
    myOneTimeJob:
      jobBootstrapBeanName: myOneTimeJobBean
      # 其他配置...

错误处理策略

ElasticJob 提供了多种错误处理策略,可以在作业执行异常时采取不同的应对措施。

内置策略

  1. 日志策略(LOG):记录错误日志但不中断作业(默认策略)

    jobErrorHandlerType: LOG
    
  2. 抛出异常策略(THROW):抛出系统异常并中断作业

    jobErrorHandlerType: THROW
    
  3. 忽略策略(IGNORE):忽略异常且不中断作业

    jobErrorHandlerType: IGNORE
    

扩展策略

  1. 邮件通知策略

    jobErrorHandlerType: EMAIL
    props:
      email:
        host: smtp.example.com
        port: 465
        username: your-email@example.com
        password: your-password
        to: recipient@example.com
    
  2. 企业微信通知策略

    jobErrorHandlerType: WECHAT
    props:
      wechat:
        webhook: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your-key
    
  3. 钉钉通知策略

    jobErrorHandlerType: DINGTALK
    props:
      dingtalk:
        webhook: https://oapi.dingtalk.com/robot/send?access_token=your-token
        secret: your-secret
    

最佳实践

  1. 分片策略:合理设置 shardingTotalCount 和 shardingItemParameters,确保数据均匀分布

  2. 幂等性设计:作业处理必须具备幂等性,防止重复执行导致数据问题

  3. 错误处理:根据业务重要性选择合适的错误处理策略,关键业务建议使用通知策略

  4. 性能监控:结合 Spring Boot Actuator 对作业执行情况进行监控

  5. 配置管理:将不同环境的配置分离,使用 Spring Profile 管理

常见问题

  1. 作业不执行:检查 ZooKeeper 连接是否正常,定时表达式是否正确

  2. 分片不均:确认 shardingTotalCount 设置合理,检查分片算法是否合适

  3. 依赖冲突:注意 ElasticJob 与其他框架的版本兼容性

  4. 资源竞争:对于数据库操作等共享资源,考虑使用分布式锁

通过 ElasticJob Spring Boot Starter,开发者可以轻松实现分布式调度功能,将精力集中在业务逻辑的实现上,而无需过多关注底层分布式协调的复杂性。

shardingsphere-elasticjob Distributed scheduled job shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/el/elastic-job

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明树来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值