作业逻辑实现与 ElasticJob 的其他使用方式并没有较大的区别,只需将当前作业注册为 Spring 容器中的 bean。
线程安全问题
Bean 默认是单例的,如果该作业实现会在同一个进程内被创建出多个 的实例, 可以考虑设置 Scope 为 prototype
。
配置协调服务与作业
在配置文件中指定 ElasticJob 所使用的 Zookeeper。配置前缀为 elasticjob.reg-center
。
配置参考:
elasticjob:
regCenter:
serverLists: localhost:6181
namespace: elasticjob-lite-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
, 通过 execute()
方法执行作业。
OneOffJobBootstrap
bean 的名称通过属性 jobBootstrapBeanName 配置,注入时需要指定依赖的 bean 名称。 具体配置请参考。
elasticjob:
jobs:
myOneOffJob:
....
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:
regCenter:
...
jobs:
...
jobErrorHandlerType: THROW
regCenter:
...
jobs:
...
jobErrorHandlerType: IGNORE
邮件通知策略
请参考 了解更多。
Maven POM:
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-error-handler-email</artifactId>
<version>${latest.release.version}</version>
</dependency>
企业微信通知策略
请参考 了解更多。
Maven POM:
<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: you_webhook
connectTimeout: 3000
readTimeout: 5000
Maven POM:
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-error-handler-dingtalk</artifactId>
</dependency>