在配置读者和编写者时,Spring Boot批处理用例用于jobParameters和@ JobScope / @ StepScope over Environment / @ ConfigurationProperties?

时间:2016-02-19 21:27:02

标签: spring-boot spring-batch

我试图为Spring Batch Boot编写一些一致且风格正确的代码,并且我正在寻找一些反馈。

Spring批处理经典步骤范围示例:

@Bean
@StepScope
public FlatFileItemReader<Partner> reader(
        @Value("#{jobParameters[pathToFile]}") String pathToFile){
    FlatFileItemReader<Partner> itemReader = new FlatFileItemReader<Partner>();
    itemReader.setLineMapper(lineMapper());
    itemReader.setResource(new ClassPathResource(pathToFile));
    return itemReader;
}
获取

pathToFile 作为从命令行传递的作业参数。由于后期绑定,需要步长范围。

在Spring Boot中,从命令行传递的所有参数都会自动添加到Environment中,并且对于作为@ConfigurationProperties创建的bean也可以使用它们。

重构的步骤范围示例:

@Bean
@ConfigurationProperties(prefix = "my.prefix")
protected class JobProperties {

    String pathToFile;

    ...getters/setters
}

@Autowired
private JobProperties jobProperties;

@Bean
public FlatFileItemReader<Partner> reader() {
    FlatFileItemReader<Partner> itemReader = new FlatFileItemReader<Partner>();
    itemReader.setLineMapper(lineMapper());
    String pathToFile = jobProperties.getPathToFile();
    itemReader.setResource(new ClassPathResource(pathToFile));
    return itemReader;
}

假设 SpringApplication.setAddCommandLineProperties(false)未设置,是否存在@StepScope优于Environment / @ ConfigurationProperties方法的情况?在风格上,一种更好的Spring Boot方法吗? (通过代码挖掘自动配置肯定非常依赖于@ConfigurationProperties)。

1 个答案:

答案 0 :(得分:1)

这两种方法之间存在一些差异。

其一,您通过进入Spring Batch不了解的全球状态来实际配置作业。这会破坏Spring Batch中与作业参数相关的功能。例如,Spring Batch将拒绝使用相同的参数执行相同的作业两次。重新启动作业时也会遇到更多麻烦,因为您必须确保在Spring Batch之外设置的状态在两次运行之间是相同的。

二,您失去了通过命令行以外的其他方式启动作业的可能性(或者至少您需要实现其他方法来提供相同的全局状态)。如果您想同时运行多个作业,或者想要通过功能测试来测试作业,这将导致问题。

第三,reader bean的范围在两种方法上是不同的。在您的@StepScope示例中,bean的范围设置为step,在您的重构示例中,范围为singleton。在后一种情况下,bean只有一个对象实例;在前者中,在请求bean的每个步骤中都会有一个新实例(也会有一个单例范围的代理,以便可以将bean注入到作用域不同的bean中)。

最后,使用@StepScope,您还可以从步骤ExecutionContext中注入对象,而无需通过例如ChunkContext reader,简化了代码和可测试性。

顺便说一句,在您的第一个示例中,@JobScope只需要Asset_ID MAterial Swap_Location MFG111 Brick Top left MFG111 Plastic Top right MFG113 Wood Center d,您就可以注入作业参数。