Spring-批处理 Java 基于 CSV 的 FileItemWriter
Spring-Batch Java Based FileItemWriter for CSV
我有一个 Spring 包含 ItemWriter 的批处理服务,用于将数据写入 CSV。
我使用了 Spring 批处理指南给出的示例。 https://spring.io/guides/gs/batch-processing/
我尝试修改 ItemWriter 以再次创建 CSV。
我面临的问题是-
- 如果不存在,则不会创建 CSV 文件。
- 如果我事先让它可用,它不会向它写入数据。
@Bean
public ItemWriter<Person> writer(DataSource dataSource) {
FlatFileitemWriter<Person> csvWriter = new FlatFileItemWriter<Person>();
csvWriter.setResource(new ClassPathResource("csv/new-data.csv"));
csvWriter.setShouldDeleteIfExists(true);
DelimitedLineAggregator<Person> lineAggregator = new DelimitedLineAggregator<Person>();
lineAggregator.setDelimiter(",");
BeanWrapperFieldExtractor<Person> fieldExtractor = new BeanWrapperFieldExtractor<Person>();
String[] names = {"firstName", "lastName"};
fieldExtractor.setNames(names);
lineAggregator.setFieldExtractor(fieldExtractor);
csvWriter.setLineAggregator(lineAggregator);
return csvWriter;
}
我浏览了各种链接,但它们显示了基于 XML 配置的示例。如何在 JAVA 中完全做到这一点?
您正在使用ClassPathResource 进行编写。我不确定,但我认为您不能写入 ClassPathResource。尝试使用普通的 FileSystemResource 并重试。
另外,writer怎么注入?您确定它真的被实例化为 spring bean 吗?
为什么要将 DataSource 作为参数,因为您不需要数据源来实例化 FlatFileItemWriter。
我有一个 Spring 包含 ItemWriter 的批处理服务,用于将数据写入 CSV。 我使用了 Spring 批处理指南给出的示例。 https://spring.io/guides/gs/batch-processing/
我尝试修改 ItemWriter 以再次创建 CSV。
我面临的问题是-
- 如果不存在,则不会创建 CSV 文件。
- 如果我事先让它可用,它不会向它写入数据。
@Bean
public ItemWriter<Person> writer(DataSource dataSource) {
FlatFileitemWriter<Person> csvWriter = new FlatFileItemWriter<Person>();
csvWriter.setResource(new ClassPathResource("csv/new-data.csv"));
csvWriter.setShouldDeleteIfExists(true);
DelimitedLineAggregator<Person> lineAggregator = new DelimitedLineAggregator<Person>();
lineAggregator.setDelimiter(",");
BeanWrapperFieldExtractor<Person> fieldExtractor = new BeanWrapperFieldExtractor<Person>();
String[] names = {"firstName", "lastName"};
fieldExtractor.setNames(names);
lineAggregator.setFieldExtractor(fieldExtractor);
csvWriter.setLineAggregator(lineAggregator);
return csvWriter;
}
我浏览了各种链接,但它们显示了基于 XML 配置的示例。如何在 JAVA 中完全做到这一点?
您正在使用ClassPathResource 进行编写。我不确定,但我认为您不能写入 ClassPathResource。尝试使用普通的 FileSystemResource 并重试。
另外,writer怎么注入?您确定它真的被实例化为 spring bean 吗? 为什么要将 DataSource 作为参数,因为您不需要数据源来实例化 FlatFileItemWriter。