spring-batch - 如何在调度配置器中添加多个 spring 批处理作业?
问题描述
因此,下面的示例 java 类配置将从数据库中动态获取 CRON 作业表达式。到目前为止,它仅适用于 1 个工作。但是,我有另一项工作并尝试通过调用 addTriggerTask 方法添加它,但由于此错误,工作失败。有什么建议可以触发多个工作吗?
ERROR: required a single bean, but 2 were found
Action: Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
@Configuration
@EnableScheduling
public class DynamicScheduler implements SchedulingConfigurer {
private static Logger LOGGER = LoggerFactory.getLogger(DynamicScheduler.class);
@Autowired
ConfigRepo repo;
@Autowired
JobLauncher jobLauncher;
@Autowired
private Job job;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(() -> executeJob("job1"), t -> {
CronTrigger crontrigger = new CronTrigger(repo.findById("cronExpressionJob1").get().getConfigValue());
return crontrigger.nextExecutionTime(t);
});
}
public void executeJob(String jobName) {
try {
JobParameters jobParameters = new JobParametersBuilder()
.addString(jobName, String.valueOf(System.currentTimeMillis())).toJobParameters();
jobLauncher.run(job, jobParameters);
} catch (Exception e) {
LOGGER.error("Failed due to exception thrown.", e);
}
}
}
解决方案
在您当前的代码中,您@Autowired
用于将 aJob
注入DynamicScheduler
. 当您只有一个工作时,这是明确的,但是一旦您添加另一个工作,Spring 就无法消除您要注入的工作的歧义。
这就是您看到错误的原因:
错误:需要一个 bean,但找到了 2 个
行动:考虑将其中一个 bean 标记为 @Primary,更新消费者以接受多个 bean,或使用 @Qualifier 来识别应该使用的 bean
如果您想处理多个作业,那么我建议@Autowired private Job job;
从您的班级中删除并使用JobRegistry将您Job
的名称作为局部变量查找。然后将其Job
与它一起传递JobParameters
给jobLauncher.run()
。
// get JobParameters for jobName
Job job = jobRegistry.getJob( jobName );
jobLauncher.run( job, jobParameters );
推荐阅读
- jenkins - Jenkins 尝试使用 Manage Jenkins 配置 JDK 和 Maven,但我没有在页面中看到这些部分和“全局工具配置”
- here-api - Here API 端点上的凭据无效
- javascript - react-dates 日期选择器默认弹出行为
- android - Android-Go 上的 MediaStore.ACTION_IMAGE_CAPTURE
- javascript - 在 JavaScript 中创建“包含”类的实例的正确方法是什么?
- spring-boot - 有人可以检查我的 SpringBoot 的结构吗?
- sql - 如何将密码转换为MD5
- ios - GMSPanoramaView 方向与网络上的谷歌地图不一致
- python - 使用带有 kind='reg' 的 seaborn pairplot 时出现轴限制问题
- clasp - 检索访问令牌时出错:TypeError:无法读取未定义的属性“project_id”