当前位置: 首页 > 知识库问答 >
问题:

Spring Batch-使用FlatFileItemWriter API写入数据时创建新的唯一CSV名称

昌山
2023-03-14

我尝试了本文中应用的解决方案:Spring Batch——每次都创建一个新文件,而不是覆盖它,以便将数据从CSV传输到XML,但对于我使用的基于注释的方法,它不起作用。

fileItemWriter.setResource(new FileSystemResource("csv/employees-#{new java.text.SimpleDateFormat("Mddyyyyhhmmss").format(new java.util.GregorianCalendar().getTime())}.csv"));

我的批处理作业计划每1小时运行一次,此批处理作业读取表格并将数据写入CSV文件。当数据写入时,我需要创建一个新文件。。如果文件名是唯一的,那就好了,所以我希望按照帖子实现日期等。

有人能告诉我怎么回事吗?

@Bean(destroyMethod="")
    public FlatFileItemWriter<Employees> employeesWriter(){
        FlatFileItemWriter<Employees> fileItemWriter = new FlatFileItemWriter<>();
        //fileItemWriter.setResource(new FileSystemResource("csv/employees.csv"));
        fileItemWriter.setResource(new FileSystemResource("csv/employees-#{new java.text.SimpleDateFormat(&quot;Mddyyyyhhmmss&quot;).format(new java.util.GregorianCalendar().getTime())}.csv"));
        fileItemWriter.setHeaderCallback(headerCallback());

        BeanWrapperFieldExtractor<Employees> fieldExtractor = new BeanWrapperFieldExtractor<>();
        fieldExtractor.setNames(new String[] {"employeeNumber", "lastName", "firstName", "extension", "email", "officeCode", "reportsTo", "jobTitle"});

        DelimitedLineAggregator<Employees> lineAggregator = new DelimitedLineAggregator<>();
        lineAggregator.setDelimiter(",");
        lineAggregator.setFieldExtractor(fieldExtractor);

        fileItemWriter.setLineAggregator(lineAggregator);
        fileItemWriter.setShouldDeleteIfEmpty(true);

        return fileItemWriter;
    } 

共有1个答案

田阳泽
2023-03-14

有人能告诉我怎么回事吗?

三件事:

  • SpEL表达式在使用时不会像您那样进行解释

您需要声明您的作者如下:

@Bean
public FlatFileItemWriter itemWriter(@Value("employees-#{new java.text.SimpleDateFormat('Mddyyyyhhmmss').format(new java.util.GregorianCalendar().getTime())}.csv") String filename) {

   FlatFileItemWriter<Employees> fileItemWriter = new FlatFileItemWriter<>();
   fileItemWriter.setResource(new FileSystemResource(filename));
   ...
   return fileItemWriter;

}

但我建议使用步骤范围的项编写器,并将文件名作为作业参数传递,而不是使用SpEL表达式。

 类似资料:
  • 我想创造一个新的世界。cmd文件,用于过滤所有。csv文件,然后创建一组。包含结果的csv文件。 下面是一个场景。 有很多。文件夹中的csv文件csv文件中的第一列数据包含一个代码在哪里可以是任何一组数字,范围从 我希望批处理文件在01开始XX,在那里找到HH?????-01,它取行并将结果放入名为的输出文件中 开始时的代码可能不同,因此它还必须过滤 然后对文件夹中的每个csv文件重复此操作。 然

  • 我有一个字段名为 用户名:uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。 这个我想在php和mysqli中执行

  • 每次在“调用解析时间”列中有一个新的月份,我都希望用那个月份和年份创建一个新的csv文件。对于包含那个月份和年份的所有行,都要过滤到那个新的csv中。 这样地: 所有数据。csv 新文件于2015年5月发布。从所有数据创建csv。仅限2015年5月20日的csv数据 到目前为止,我有这个,但我必须为每年和每月手动创建一些东西: 编辑---------------------------------

  • 问题内容: 我创建了以下方法,以便创建唯一的随机数。(此唯一值属于树的节点): 但这并不会创建唯一的数字,并且我的列表中仍然有重复的数字。喜欢 : 问题答案: 问题是,如果它发现重复的数字,您不会在检查函数中停止for循环。循环继续进行,b可以变回true。 例如,您应该做的是:

  • 问题内容: 我需要创建一个新的XML文件并将其写入服务器。因此,我正在寻找创建新XML文件,为其写入一些基本节点,保存文件的最佳方法。然后再次打开它并写入更多数据。 我一直在保存文件。但是,要创建一个新的并编写一些基本节点,我不确定最好的方法。 有想法吗? 问题答案: DOMDocument是一个不错的选择。这是一个专门用于创建和处理XML文档的模块。您可以从头开始创建文档,或打开现有文档(或字符

  • 我正在尝试使用pysparkn和spack-csv使用以下代码将火花数据帧写入s3 但是,我得到的错误是“输出目录已经存在”,我确信输出目录在作业开始之前不存在,我尝试使用不同的输出目录名称运行,但写入仍然失败。 如果我在作业失败后查看s3桶,我发现很少有零件文件是由火花写入的,但当它尝试写入更多时它失败了,脚本在本地运行良好,我在aws集群上使用10个火花执行器。有人知道这段代码有什么问题吗?