spring-batch - 如何通过传递布尔标志来禁用或启用作业来控制所有按计划 cron 作业运行的春季批处理作业?
问题描述
我创建了一个作业状态表,其中我有一个布尔标志,基于我正在返回 cron 表达式(活动 cron 或 hypen(-) cron),我的调度程序将工作。如果要启用或禁用所有 Spring 批处理作业,布尔标志将被更新。
我们如何控制应用程序中的标志,否则我们在运行 cron 表达式时会遇到问题?
@Scheduled(cron = "#{@getCronValueDevice}")
@Scheduled(cron = "#{@getCronValueStorage}")
@Bean
public String getCronValueDevice() {
JobStatus jobStatus = jobStatusRepository.findByJobName(BatchJobConstants.DEVICE_JOB_NAME);
if (jobStatus != null && jobStatus.getIsActive()) {
return jobStatus.getActiveCronExpression();
} else {
return "-";
}
解决方案
如果目标是使用标志启用/禁用计划作业,我会保持简单,并使作业启动代码以该标志为条件,例如:
@Scheduled(cron = "#{your.cron.expression}")
public void runJob() {
boolean enabled = ... // dynamically load the flag as needed
if (enabled) {
// run the job
}
}
这不需要动态更改 cron 表达式来启用/禁用计划。当标志为假时,除非再次重新激活,否则作业将不会在后续计划中执行。
顺便说一句,kubernetes 提供了一个类似的功能来暂停/恢复 cron 作业(这可以通过修补 cron 作业规范来即时完成)。
推荐阅读
- sql - 比较同一张表中的数据
- c# - 实体框架继承,我可以根据具体类映射/不映射属性吗?
- c# - 如何在 ItemsControl 中等待容器的生成?
- json - 如何访问我自己的新闻源和视频、我分享的照片?
- java - java.io.IOException:服务器返回 HTTP 响应代码:500 用于 Web 服务
- azure - MSAL - 使用 IntegratedWindowsAuth 获取令牌时出现问题
- javascript - php 等效于 javascript 中的 mcrypt_decrypt?
- javascript - Google Charts Api:为各个条形设置 ColumnChart Bar 颜色
- active-directory - CentOS 7 SSSD 无法创建 GSSAPI 加密的 LDAP 连接
- javascript - 访问传递给 nodejs 可执行文件的命令行选项/标志