![](/img/trans.png)
[英]Configuring openCSV instead of FlatFileItemReader in spring batch step
[英]Spring Batch FlatFileItemReader provide filename in future step
所以我正在構建一個使用 Spring Batch 的批處理。 我定義了一個有幾個步驟的作業,第一個是 Tasklet 的實現,它是一個文件觀察器,並檢查與特定文件掩碼匹配的任何文件的目錄。 找到該文件后,我們將繼續進行該過程的下一步。 最初,這也是 Tasklet 的另一種實現,我們循環遍歷文件和每條記錄,批量加載到 Oracle。 這花費的時間太長了。 我發現使用 FlatFileItemReader 和 JdbcBatchItemWriter 確實快了 1000 倍。 無論如何,我的問題是,當使用 FlatFileItemReader 時,我必須定義我的資源並在創建該 Bean 時提供 FileSystemResouce。 我真的想在我的第一步完成后提供該文件名,因為我需要運行一個文件觀察器並找出我們想要處理的文件名。 有沒有辦法實現這一目標?
@Bean
public FlatFileItemReader<PartnerRelationship> partnerRelationshipReader() throws ParseException {
FlatFileItemReader<PartnerRelationship> reader = new FlatFileItemReader<>();
reader.setResource(new FileSystemResource("/path/to/my/file/file_20210714.dat"));
reader.setBufferedReaderFactory(new CustomFileReaderFactory());
reader.setStrict(false);
reader.setLineMapper(new DefaultLineMapper<PartnerRelationship>() {{
setLineTokenizer(new FixedLengthTokenizer() {{
setNames(Constants.partnerRelationshipFields);
setColumns(Constants.partnerRelationshipIndeces);
}});
setFieldSetMapper(new PartnerRelationshipFieldSetMapper());
}});
return reader;
}
您可以將資源傳遞給 jobExecutionContext:
ExecutionContext jobExecutionContext = stepExecution.getJobExecution().getExecutionContext();
jobExecutionContext.put("resource", res);
如果您設置了 bean stepScope,則可以檢索它:
@Bean
@StepScope
public FlatFileItemReader<PartnerRelationship> partnerRelationshipReader(@Value #{jobExecutionContext['resource']} Resource res) throws ParseException {
FlatFileItemReader<PartnerRelationship> reader = new FlatFileItemReader<>();
reader.setResource(res);
reader.setBufferedReaderFactory(new CustomFileReaderFactory());
reader.setStrict(false);
reader.setLineMapper(new DefaultLineMapper<PartnerRelationship>() {{
setLineTokenizer(new FixedLengthTokenizer() {{
setNames(Constants.partnerRelationshipFields);
setColumns(Constants.partnerRelationshipIndeces);
}});
setFieldSetMapper(new PartnerRelationshipFieldSetMapper());
}});
return reader;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.