Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于CSV的基于Java的Spring批处理FileItemWriter_Spring_Spring Batch - Fatal编程技术网

用于CSV的基于Java的Spring批处理FileItemWriter

用于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

我有一个包含ItemWriter的Spring批处理服务,用于将数据写入CSV。 我使用了Spring Batch guide给出的示例

我试图修改ItemWriter以再次创建CSV

我面临的问题是-

  • 如果CSV文件不存在,则不会创建该文件
  • 如果我事先提供了它,它就不会向它写入数据

  • @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;
    }