[英]Spring Batch - FlatFileItemReader for different delimited files
我有兩個不同的文件,一個用管道分隔符“ |”分隔 還有一個用逗號“,”。
我正在使用Spring Batch使用FlatFileItemReader處理這些文件。 我不想有兩個讀者和兩個作家的文件。 我可以為這兩個文件使用一個通用的FlatFileItemReader嗎?
文件將映射到的對象也不同。
您可以注入DelimitedLineTokenizer,並可以根據需要設置定界符。 您可以使用StepExecutionListener使其通用,並需要覆蓋beforeStep()方法。 您將在StepExecution中設置定界符。 當您解析“,”文件時,則分別分隔stepExecution.getExecutionContext()。putString(“ delimiter”,“,”); 當文件以“ |”分隔時 然后stepExecution.getExecutionContext()。putString(“ delimiter”,“ |”);
但是您需要創建兩個作業。 需要相應地指定監聽器。
您可以在Walking Techie上的Spring Batch中看到上面解釋邏輯的示例
通用閱讀器的代碼:
@Bean
@StepScope
public FlatFileItemReader<Domain> reader(@Value("#{stepExecutionContext[delimiter]}") String delimiter) {
FlatFileItemReader<Domain> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("sample-data.csv"));
reader.setLineMapper(new DefaultLineMapper<Domain>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[]{"id", "name"});
setDelimiter(delimiter);
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Domain>() {{
setTargetType(Domain.class);
}});
}});
return reader;
}
您可以從Spring Batch Tutorial中的spring boot中找到有關spring batch的許多示例。 您將在這里找到與彈簧批處理有關的所有問題。
您可以將DelimitedLineTokenizer注入FlatFileItemReader並將其定界符值設置為它。 XML配置的相關部分如下
<bean id="pipeDelimitedFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
...
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
...
<property name="delimiter" value="|"/>
</bean>
</property>
...
</bean>
</property>
...
</bean>
例如,您可以類似地配置另一個commaDelimitedFileItemReader bean(逗號實際上是DelimitedLineTokenizer的默認分隔符值)
我已經在Spring Boot中創建了一個示例Spring Batch程序,該程序將創建兩個作業,一個作業將處理以逗號分隔的CSV文件中的數據讀取,其他作業將以豎線分隔的CSV文件中的數據讀取(“ | ”)。 這兩個作業都使用相同的通用FlatFileItemReader從CSV文件讀取數據,並使用MongoItemWriter將數據寫入MongoDB。
您可以在Spring Boot的Spring Batch示例中找到說明和工作代碼-帶有與Mongo數據庫不同的分隔符的CSV文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.