升级到 Spring Batch 核心 jar 到 5.12 后,由于作业注册表不包含作业,服务器崩溃后 Spring 批处理作业重新启动失败

问题描述 投票:0回答:1

由于服务器崩溃而处于 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)

spring-boot spring-batch batch-processing spring-batch-integration
1个回答
0
投票

尝试将

JobRegistryBeanPostProcessor
更改为 v5.1.1 中引入的
JobRegistrySmartInitializingSingleton
。这应该可以解决您的问题。

@Bean
public JobRegistrySmartInitializingSingleton jobRegistrySmartInitializingSingleton(@qualifier("febpBatchJobRegistry") JobRegistry jobRegistry) {
    return new JobRegistrySmartInitializingSingleton(jobRegistry);
}
© www.soinside.com 2019 - 2024. All rights reserved.