I have similar problem - I would like to write/read GCP Cloud Storages files. I use example from https://github.com/ncelq/spring-batch-gcs/blob/master/src/main/java/com/cloud/sample/GSFileWriter.java but header/footer is not writed.
@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;
}
If I use standard FlatFileItemWriter header and footer are saved
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
I will be grateful for help.