ElasticJob Spring Boot Starter 使用指南
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 会自动创建 OneOffJobBootstrap
或 ScheduleJobBootstrap
实例并注册到 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 # 读取超时时间(毫秒)
最佳实践建议
-
作业实现:建议将作业逻辑与业务逻辑分离,保持作业类的单一职责原则
-
配置管理:对于生产环境,建议将敏感配置如ZooKeeper连接信息、邮件账号密码等放在配置中心或使用环境变量
-
错误处理:根据业务重要性选择合适的错误处理策略,关键业务建议使用通知策略
-
测试验证:在部署前充分测试作业的各种场景,包括正常执行、异常处理等
-
监控告警:结合错误处理策略建立完善的监控告警机制
通过合理使用 ElasticJob Spring Boot Starter,开发者可以快速构建稳定可靠的分布式调度系统,将更多精力集中在业务逻辑的实现上。
shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/shar/shardingsphere-elasticjob
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考