作业逻辑实现与 ElasticJob 的其他使用方式并没有较大的区别,只需将当前作业注册为 Spring 容器中的 bean。

线程安全问题

Bean 默认是单例的,如果该作业实现会在同一个进程内被创建出多个 的实例, 可以考虑设置 Scope 为 prototype

配置协调服务与作业

在配置文件中指定 ElasticJob 所使用的 Zookeeper。配置前缀为 elasticjob.reg-center

配置参考:

  1. elasticjob:
  2. regCenter:
  3. serverLists: localhost:6181
  4. namespace: elasticjob-lite-springboot
  5. jobs:
  6. dataflowJob:
  7. elasticJobClass: org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob
  8. cron: 0/5 * * * * ?
  9. shardingTotalCount: 3
  10. shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou
  11. scriptJob:
  12. elasticJobType: SCRIPT
  13. cron: 0/10 * * * * ?
  14. shardingTotalCount: 3
  15. props:
  16. script.command.line: "echo SCRIPT Job: "

定时调度

定时调度作业在 Spring Boot 应用程序启动完成后会自动启动,无需其他额外操作。

一次性调度的作业的执行权在开发者手中,开发者可以在需要调用作业的位置注入 OneOffJobBootstrap, 通过 execute() 方法执行作业。

OneOffJobBootstrap bean 的名称通过属性 jobBootstrapBeanName 配置,注入时需要指定依赖的 bean 名称。 具体配置请参考。

  1. elasticjob:
  2. jobs:
  3. myOneOffJob:
  4. ....
  1. public class OneOffJobController {
  2. // 通过 "@Resource" 注入
  3. @Resource(name = "myOneOffJobBean")
  4. private OneOffJobBootstrap myOneOffJob;
  5. @GetMapping("/execute")
  6. public String executeOneOffJob() {
  7. myOneOffJob.execute();
  8. return "{\"msg\":\"OK\"}";
  9. }
  10. // 通过 "@Autowired" 注入
  11. @Autowired
  12. @Qualifier(name = "myOneOffJobBean")
  13. private OneOffJobBootstrap myOneOffJob2;
  14. @GetMapping("/execute2")
  15. public String executeOneOffJob2() {
  16. myOneOffJob2.execute();
  17. return "{\"msg\":\"OK\"}";
  18. }
  19. }

记录日志策略

抛出异常策略

  1. elasticjob:
  2. regCenter:
  3. ...
  4. jobs:
  5. ...
  6. jobErrorHandlerType: THROW
  1. regCenter:
  2. ...
  3. jobs:
  4. ...
  5. jobErrorHandlerType: IGNORE

邮件通知策略

请参考 了解更多。

Maven POM:

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

企业微信通知策略

请参考 了解更多。

Maven POM:

  1. <dependency>
  2. <groupId>org.apache.shardingsphere.elasticjob</groupId>
  3. <artifactId>elasticjob-error-handler-wechat</artifactId>
  4. <version>${latest.release.version}</version>
  5. </dependency>
  1. elasticjob:
  2. regCenter:
  3. ...
  4. jobs:
  5. ...
  6. jobErrorHandlerType: WECHAT
  7. props:
  8. wechat:
  9. webhook: you_webhook
  10. connectTimeout: 3000
  11. readTimeout: 5000

Maven POM:

  1. <dependency>
  2. <groupId>org.apache.shardingsphere.elasticjob</groupId>
  3. <artifactId>elasticjob-error-handler-dingtalk</artifactId>
  4. </dependency>