用于CSV的基于Java的Spring批处理FileItemWriter
我有一个包含ItemWriter的Spring批处理服务,用于将数据写入CSV。 我使用了Spring Batch guide给出的示例 我试图修改ItemWriter以再次创建CSV 我面临的问题是-用于CSV的基于Java的Spring批处理FileItemWriter,spring,spring-batch,Spring,Spring Batch,我有一个包含ItemWriter的Spring批处理服务,用于将数据写入CSV。 我使用了Spring Batch guide给出的示例 我试图修改ItemWriter以再次创建CSV 我面临的问题是- 如果CSV文件不存在,则不会创建该文件 如果我事先提供了它,它就不会向它写入数据 @Bean 公共ItemWriter编写器(数据源数据源){ FlatFileitemWriter csvWriter=新的FlatFileitemWriter(); setResource(新类路径资源(“cs
@Bean
公共ItemWriter编写器(数据源数据源){
FlatFileitemWriter csvWriter=新的FlatFileitemWriter();
setResource(新类路径资源(“csv/new data.csv”);
csvWriter.setShouldDeleteIfExists(true);
DelimitedLineAggregator lineAggregator=新的DelimitedLineAggregator();
lineAggregator.setDelimiter(“,”);
BeanWrapperFieldExtractor字段提取器=新的BeanWrapperFieldExtractor();
字符串[]名称={“firstName”,“lastName”};
fieldExtractor.setNames(名称);
lineAggregator.setFieldExtractor(fieldExtractor);
csvWriter.setLineAggregator(线性聚合器);
返回CSV编写器;
}
我已经浏览了各种链接,但它们显示了基于XML配置的示例。如何在JAVA中完全做到这一点 您正在使用ClassPathResource进行写入。我不确定,但我认为您不能向ClassPathResource写入。请尝试使用普通的文件系统资源,然后重试 此外,你如何注入作者?您确定它真的被实例化为Springbean吗?
既然不需要数据源来实例化FlatFileItemWriter,为什么要使用数据源作为参数。FileSystemResource完成了这项工作。spring将负责写入器的注入(参见上面提供的链接)。DataSource在这里不是强制性的,我简单地使用了link中提供的代码,您可以删除DataSource参数。不管怎样,它都会起作用的。如果您有一个@Bean注释方法,spring将尝试自动关联该方法的所有参数。因为您不需要数据源,所以不需要自动连接它。
@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;
}