由于服务器崩溃而处于 STARTED 状态的 Spring 批处理分区作业。 现在,如果我们将作业执行和停止的状态从 STARTED 更改为 FAILED 并调用 jobOperator.restart(failedBatchExecutionId);它用于重新启动相同的程序并处理待处理的数据。
对于我们使用过的,
@bean(name = "febpBatchJobRegistry")
public JobRegistry jobRegistry() throws Exception {
return new MapJobRegistry();
}
@bean
public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(@qualifier("febpBatchJobRegistry") JobRegistry jobRegistry) {
JobRegistryBeanPostProcessor postProcessor = new JobRegistryBeanPostProcessor();
postProcessor.setJobRegistry(jobRegistry);
return postProcessor;
}
@bean(name = "febpBatchJobOperator")
public JobOperator jobOperator(@qualifier("febpBatchJobLauncher") JobLauncher jobLauncher, @qualifier("febpBatchJobRepository") JobRepository jobRepository,
@qualifier("febpBatchJobRegistry") JobRegistry jobRegistry, @qualifier("febpBatchJobExplorer") JobExplorer jobExplorer) {
final SimpleJobOperator jobOperator = new SimpleJobOperator();
jobOperator.setJobLauncher(jobLauncher);
jobOperator.setJobRepository(jobRepository);
jobOperator.setJobRegistry(jobRegistry);
jobOperator.setJobExplorer(jobExplorer);
return jobOperator;
}
但现在升级到 5.12,我们面临着 org.springframework.batch.core.launch.NoSuchJobException:没有注册名为 [FEBP_EMP_TAX_CALCULATION] 的作业配置 在 org.springframework.batch.core.configuration.support.MapJobRegistry.getJob(MapJobRegistry.java:68)
尝试将
JobRegistryBeanPostProcessor
更改为 v5.1.1 中引入的 JobRegistrySmartInitializingSingleton
。这应该可以解决您的问题。
@Bean
public JobRegistrySmartInitializingSingleton jobRegistrySmartInitializingSingleton(@qualifier("febpBatchJobRegistry") JobRegistry jobRegistry) {
return new JobRegistrySmartInitializingSingleton(jobRegistry);
}