[英]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.