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