我试图找到看似简单但回避问题的答案。spring 如何识别批处理配置中的作业。一切都用 @Bean 注释,没有什么可识别的。春天是否会识别名称中带有关键字的人?像 xyzStep xzyJob 等?我正在尝试遵循此处的官方文档
提前致谢。
我试图找到看似简单但回避问题的答案。spring 如何识别批处理配置中的作业。一切都用 @Bean 注释,没有什么可识别的。春天是否会识别名称中带有关键字的人?像 xyzStep xzyJob 等?我正在尝试遵循此处的官方文档
提前致谢。
一切都用 @Bean 注释,没有什么可识别的。春天是否会识别名称中带有关键字的人?
是的,如注释的Javadoc 中所述@Bean
:
the default strategy for determining the name of a bean is to use the name of the @Bean method
也就是说,应该注意 Spring bean 名称和 Spring Batch 作业/步骤名称之间存在差异(可能不同):
@Bean
public Job job(JobBuilderFactory jobBuilderFactory) {
return jobBuilderFactory.get("myJob")
//...
.build();
}
在此示例中,Spring bean 名称为job
,Spring Batch 作业名称为myJob
。
当我们尝试启动作业时,Spring 会在事件中识别作业。下面是一个小片段供参考,
这是一个返回 Job 类型的 bean 定义,其中包含所有步骤的编排,
@Bean
public Job testJob() throws Exception {
Job job = jobBuilderFactory.get("testJob").incrementer(new RunIdIncrementer())
.start(step1()).next(step2()).next(step3()).end()
.listener(jobCompletionListener()).build();
ReferenceJobFactory referenceJobFactory = new ReferenceJobFactory(job);
registry.register(referenceJobFactory);
return job;
}
下面将使用 bean 并启动作业,这意味着定义为作业一部分的工作流将被执行,
@Autowired
JobLauncher jobLauncher;
@Autowired
Job testJob;
// eliminating the method defnition for simplicity,
try {
jobLauncher.run(testJob, jobParameters);
} catch (Exception e) {
logger.error("Exception while running a batch job {}", e.getMessage());
}