0

我试图找到看似简单但回避问题的答案。spring 如何识别批处理配置中的作业。一切都用 @Bean 注释,没有什么可识别的。春天是否会识别名称中带有关键字的人?像 xyzStep xzyJob 等?我正在尝试遵循此处的官方文档

提前致谢。

4

2 回答 2

2

一切都用 @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

于 2020-05-14T16:03:09.197 回答
1

当我们尝试启动作业时,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());
  } 
于 2020-05-13T17:34:42.827 回答