Spring 引导批处理作业识别
Spring boot batch job identification
我一直在努力寻找看似简单却难以捉摸的问题的答案。 spring 如何识别批处理配置中的作业。一切都用@Bean 注释,没有什么可识别的。 spring 是否识别名称本身带有关键字的那些?像 xyzStep xzyJob 等?我正在尝试遵循 here
上的官方文档
提前致谢。
Spring 在我们尝试启动作业时标识事件中的作业。下面是一个小片段供参考,
这是一个 returns 作业类型的 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());
}
Everything is annotated with @Bean and nothing to identify. Does the spring identify those with keywords in the name itself?
是,如 Javadoc of the @Bean
annotation 中所述:
the default strategy for determining the name of a bean is to use the name of the @Bean method
也就是说,需要注意的是,Spring bean name 和 Spring Batch job/step name 是有区别的(可以不同):
@Bean
public Job job(JobBuilderFactory jobBuilderFactory) {
return jobBuilderFactory.get("myJob")
//...
.build();
}
在此示例中,Spring bean 名称为 job
,Spring 批处理作业名称为 myJob
。
我一直在努力寻找看似简单却难以捉摸的问题的答案。 spring 如何识别批处理配置中的作业。一切都用@Bean 注释,没有什么可识别的。 spring 是否识别名称本身带有关键字的那些?像 xyzStep xzyJob 等?我正在尝试遵循 here
上的官方文档提前致谢。
Spring 在我们尝试启动作业时标识事件中的作业。下面是一个小片段供参考,
这是一个 returns 作业类型的 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());
}
Everything is annotated with @Bean and nothing to identify. Does the spring identify those with keywords in the name itself?
是,如 Javadoc of the @Bean
annotation 中所述:
the default strategy for determining the name of a bean is to use the name of the @Bean method
也就是说,需要注意的是,Spring bean name 和 Spring Batch job/step name 是有区别的(可以不同):
@Bean
public Job job(JobBuilderFactory jobBuilderFactory) {
return jobBuilderFactory.get("myJob")
//...
.build();
}
在此示例中,Spring bean 名称为 job
,Spring 批处理作业名称为 myJob
。