如何配置 FlatFileItemWriter 将文件输出到 ByteArrayRecource?

2024-02-28

我遇到的情况是部署服务器不允许应用程序将文件输出到其文件系统......所以我要做的是配置FlatFileItemWriter 将结果文件输出到静态Resource属性(多线程在这里不是问题)。 我当前的代码是

...
flatFileItemWriter.setResource(new FileSystemResource("outputBatch/users.csv"));
...

有什么方法可以将此文件输出到静态资源属性以便稍后访问,例如ByteArrayResource or InMemoryResource。 提前致谢


我有类似的问题 - 我想写入/读取 GCP 云存储文件。在使用示例中https://github.com/ncelq/spring-batch-gcs/blob/master/src/main/java/com/cloud/sample/GSFileWriter.java https://github.com/ncelq/spring-batch-gcs/blob/master/src/main/java/com/cloud/sample/GSFileWriter.java但页眉/页脚未写入。

  @Bean
  @StepScope
  public GCSFileWriter<MyClass> myClassGcsWriter() throws IOException {
    final Resource outputResource = this.gcpLoader.getResource("gs://my-bucket/myfile");
    final GCSFileWriter<MyClass> writer = new GCSFileWriter<>();
    final Storage storage = StorageOptions.newBuilder().setCredentials(GoogleCredentials.getApplicationDefault()).build().getService();
    writer.setStorage(storage);
    writer.setResource(outputResource);

    final FormatterLineAggregator<MyClass> formatterLineAggregator = new FormatterLineAggregator<>();
    final BeanWrapperFieldExtractor<MyClass> beanWrapperFieldExtractor = new BeanWrapperFieldExtractor<>();
    beanWrapperFieldExtractor.setNames(FlatFileFormatConverter.getNames(MyClass.class, false, true));
    formatterLineAggregator.setFieldExtractor(beanWrapperFieldExtractor);
    formatterLineAggregator.setFormat(FlatFileFormatConverter.getFormat(MyClass.class, true));

    writer.setShouldDeleteIfExists(true);
    writer.setLineAggregator(formatterLineAggregator);
    writer.setHeaderCallback(getFileHeaderCallback(null));
    writer.setFooterCallback(getFileFooterCallback(null));

    return writer;
  }

如果我使用标准 FlatFileItemWriter 保存页眉和页脚

    final Resource outputResource = new FileSystemResource("somedirectory/myfile");

// @formatter:off
return new FlatFileItemWriterBuilder<MyClass>()
    .name("myClassWriter")
    .resource(outputResource)
    .formatted()
    .format(FlatFileFormatConverter.getFormat(MyClass.class, true))
    .names(FlatFileFormatConverter.getNames(MyClass.class, false, true))
    .shouldDeleteIfExists(true)
    .headerCallback(getFileHeaderCallback(null))
    .footerCallback(getFileFooterCallback(null))
    .build();
// @formatter:on

我将不胜感激的帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何配置 FlatFileItemWriter 将文件输出到 ByteArrayRecource? 的相关文章

随机推荐