ElasticJob Spring Boot Starter 使用指南

ElasticJob Spring Boot Starter 使用指南

shardingsphere-elasticjob shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/shar/shardingsphere-elasticjob

概述

ElasticJob 提供了一个定制化的 Spring Boot Starter,可以与 Spring Boot 无缝集成。通过使用 ElasticJob Spring Boot Starter,开发者无需手动配置 CoordinatorRegistryCenter 和 JobBootstrap,只需实现作业逻辑并添加少量配置即可解决分布式调度问题。

作业配置

实现 ElasticJob 作业

实现 ElasticJob 作业的方式与其他使用方式类似,主要区别在于作业需要注册到 Spring IoC 容器中。

线程安全问题注意事项: 默认情况下,Spring 中的 Bean 是单例的。如果一个 ElasticJob 实例会被多个 JobBootstrap 使用,建议将 Bean 的作用域设置为 prototype

@Component
public class SpringBootDataflowJob implements DataflowJob<Foo> {
    
    @Override
    public List<Foo> fetchData(final ShardingContext shardingContext) {
        // 获取数据逻辑
    }
    
    @Override
    public void processData(final ShardingContext shardingContext, final List<Foo> data) {
        // 处理数据逻辑
    }
}

配置注册中心与作业

通过配置文件配置 ElasticJob 使用的 Zookeeper:

elasticjob.jobs 是一个 Map 结构,key 作为作业名称,value 包含特定的作业类型和配置。Starter 会自动创建 OneOffJobBootstrapScheduleJobBootstrap 实例并注册到 Spring IoC 容器中。

配置示例:

elasticjob:
  regCenter:
    serverLists: localhost:6181  # ZooKeeper 服务器列表
    namespace: elasticjob-springboot  # 命名空间
  jobs:
    dataflowJob:
      elasticJobClass: org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob
      cron: 0/5 * * * * ?  # 定时表达式
      shardingTotalCount: 3  # 分片总数
      shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou  # 分片参数
    scriptJob:
      elasticJobType: SCRIPT  # 脚本作业类型
      cron: 0/10 * * * * ?  # 定时表达式
      shardingTotalCount: 3  # 分片总数
      props:
        script.command.line: "echo SCRIPT Job: "  # 脚本命令

作业启动

定时作业

直接启动 Spring Boot 应用即可,定时作业会在应用启动时自动开始调度。

一次性作业

一次性作业的执行时机由开发者控制。可以通过注入 OneOffJobBootstrap Bean 到需要触发作业的地方,然后手动调用 execute() 方法来执行作业。

Bean 名称可以通过 "jobBootstrapBeanName" 属性指定:

elasticjob:
  jobs:
    myOneOffJob:
      jobBootstrapBeanName: myOneOffJobBean  # 自定义Bean名称
      ....

使用示例:

@RestController
public class OneOffJobController {

    // 通过@Resource注入
    @Resource(name = "myOneOffJobBean")
    private OneOffJobBootstrap myOneOffJob;
    
    @GetMapping("/execute")
    public String executeOneOffJob() {
        myOneOffJob.execute();
        return "{\"msg\":\"OK\"}";
    }

    // 通过@Autowired注入
    @Autowired
    @Qualifier(name = "myOneOffJobBean")
    private OneOffJobBootstrap myOneOffJob2;

    @GetMapping("/execute2")
    public String executeOneOffJob2() {
        myOneOffJob2.execute();
        return "{\"msg\":\"OK\"}";
    }
}

错误处理策略配置

在使用 ElasticJob 过程中,当作业出现异常时,可以使用以下错误处理策略:

| 错误处理策略名称 | 描述 | 是否内置 | 是否默认 | 需要额外配置 | |------------------------------|--------------------------------------------|----------|----------|--------------| | 日志策略 | 记录错误日志但不中断作业 | 是 | 是 | 否 | | 抛出异常策略 | 抛出系统异常并中断作业 | 是 | 否 | 否 | | 忽略策略 | 忽略异常且不中断作业 | 是 | 否 | 否 | | 邮件通知策略 | 发送邮件通知但不中断作业 | 否 | 否 | 是 | | 企业微信通知策略 | 发送企业微信通知但不中断作业 | 否 | 否 | 是 | | 钉钉通知策略 | 发送钉钉通知但不中断作业 | 否 | 否 | 是 |

日志策略配置

elasticjob:
  regCenter:
    ...
  jobs:
    ...
    jobErrorHandlerType: LOG  # 使用日志策略

抛出异常策略配置

elasticjob:
  regCenter:
    ...
  jobs:
    ...
    jobErrorHandlerType: THROW  # 使用抛出异常策略

忽略策略配置

elasticjob:
  regCenter:
    ...
  jobs:
    ...
    jobErrorHandlerType: IGNORE  # 使用忽略策略

邮件通知策略配置

需要添加额外依赖:

<dependency>
    <groupId>org.apache.shardingsphere.elasticjob</groupId>
    <artifactId>elasticjob-error-handler-email</artifactId>
    <version>${latest.release.version}</version>
</dependency>

配置示例:

elasticjob:
  regCenter:
    ...
  jobs:
    ...
    jobErrorHandlerType: EMAIL  # 使用邮件通知策略
    props:
      email:
        host: smtp.example.com  # SMTP服务器地址
        port: 465  # 端口
        username: your_username  # 用户名
        password: your_password  # 密码
        useSsl: true  # 是否使用SSL
        subject: ElasticJob Error Notification  # 邮件主题
        from: sender@example.com  # 发件人
        to: recipient1@example.com,recipient2@example.com  # 收件人
        cc: cc@example.com  # 抄送
        bcc: bcc@example.com  # 密送
        debug: false  # 是否开启调试模式

企业微信通知策略配置

需要添加额外依赖:

<dependency>
    <groupId>org.apache.shardingsphere.elasticjob</groupId>
    <artifactId>elasticjob-error-handler-wechat</artifactId>
    <version>${latest.release.version}</version>
</dependency>

配置示例:

elasticjob:
  regCenter:
    ...
  jobs:
    ...
    jobErrorHandlerType: WECHAT  # 使用企业微信通知策略
    props:
      wechat:
        webhook: your_webhook_url  # Webhook地址
        connectTimeout: 3000  # 连接超时时间(毫秒)
        readTimeout: 5000  # 读取超时时间(毫秒)

钉钉通知策略配置

需要添加额外依赖:

<dependency>
    <groupId>org.apache.shardingsphere.elasticjob</groupId>
    <artifactId>elasticjob-error-handler-dingtalk</artifactId>
    <version>${latest.release.version}</version>
</dependency>

配置示例:

elasticjob:
  regCenter:
    ...
  jobs:
    ...
    jobErrorHandlerType: DINGTALK  # 使用钉钉通知策略
    props:
      dingtalk:
        webhook: your_webhook_url  # Webhook地址
        keyword: your_keyword  # 关键词
        secret: your_secret  # 密钥
        connectTimeout: 3000  # 连接超时时间(毫秒)
        readTimeout: 5000  # 读取超时时间(毫秒)

最佳实践建议

  1. 作业实现:建议将作业逻辑与业务逻辑分离,保持作业类的单一职责原则

  2. 配置管理:对于生产环境,建议将敏感配置如ZooKeeper连接信息、邮件账号密码等放在配置中心或使用环境变量

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

  4. 测试验证:在部署前充分测试作业的各种场景,包括正常执行、异常处理等

  5. 监控告警:结合错误处理策略建立完善的监控告警机制

通过合理使用 ElasticJob Spring Boot Starter,开发者可以快速构建稳定可靠的分布式调度系统,将更多精力集中在业务逻辑的实现上。

shardingsphere-elasticjob shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/shar/shardingsphere-elasticjob

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

施谨贞Des

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

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

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

打赏作者

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

抵扣说明:

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

余额充值