我想寫一些代碼是一致的和風格正確的春季批量啓動,我在尋找一些反饋。在配置讀寫器時,Spring Boot批處理用例可用於jobParameters和@ JobScope/@ StepScope over Environment/@ ConfigurationProperties?
彈簧批次經典步驟-範圍例如:
@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中,從命令行傳遞的所有參數都會自動添加到環境中,並且它們也可用於創建爲@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(假)是不會被設置,是在那裏有@StepScope優選將環境/ @ ConfigurationProperties的情況下進場?在風格上,Spring Boot是更好的方法嗎? (通過代碼挖掘自動配置肯定依賴於@ConfigurationProperties)。
這些都是好點。我的主要用例是命令行,Spring引導將使用本地配置文件執行作業,因此全局狀態的大部分將在那裏進行管理。我提供了一個RunIdIncrementer,所以至少有run.id = 1,2,3 ...附加到作業中。也就是說我想採用一些約定,將來可以在容器/管理器中運行這些約定,而且你所說的話是有道理的。 –