У меня есть весенняя пакетная конфигурация, которая читает из нескольких файлов и записывает несколько файлов. Можно ли писать только в один файл, читая из нескольких. Допустим, я получаю огромный файл XML, я разбиваю XML на небольшие файлы, использую разделитель и параллельно читаю небольшие файлы. Но мне нужно записать все данные, прочитанные из разных небольших файлов xml, в один выходной файл. Возможно ли это с помощью Spring Batch? Я знаю, что это возможно, если синхронизировать писатель, но я ищу любой другой возможный способ Конфигурация задания
@Bean
public Job job(final Step parser) {
return jobBuilderFactory.get("JOB")
.flow(parser)
.end()
.build();
}
@Bean
public Step parser(final Step parserWorker, final Partitioner partitioner) {
return stepBuilderFactory.get("parser")
.partitioner("parser", partitioner)
.step(parserWorker)
.taskExecutor(taskExecutor())
.build();
}
@Bean
public Step parserWorker(
final StaxEventItemReader reader,
final FlatFileItemWriter<Employee> writer) {
return stepBuilderFactory.get("parserWorker")
.<Employee, Employee>chunk(Integer.parseInt(chunkSize))
.reader(reader)
.writer(writer)
.build();
}
@Bean
@StepScope
public StaxEventItemReader<Employee> reader(final @Value("file:#{stepExecutionContext[file]}") Resource resource) {
StaxEventItemReader<Employee> staxEventItemReader = new StaxEventItemReader<>();
staxEventItemReader.setResource(resource);
staxEventItemReader.setFragmentRootElementName("Employee");
Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller();
unMarshaller.setClassesToBeBound(Employee.class);
staxEventItemReader.setUnmarshaller(unMarshaller);
return staxEventItemReader;
}
@Bean()
public FlatFileItemWriter<Employee> fileWriter() {
FlatFileItemWriter<Employee> fileWriter = new FlatFileItemWriter<>();
fileWriter.setResource(new FileSystemResource("out.csv"));
EmployeeAggregator lineAggregator = new EmployeeAggregator();
fileWriter.setLineAggregator(lineAggregator);
fileWriter.setLineSeparator(EMPTY_STRING);
fileWriter.setHeaderCallback(new HeaderCallback());
fileWriter.setFooterCallback(new FooterCallback());
return innlesFileWriter;
}
Я получаю ошибку org.springframework.batch.item.ItemStreamException: Output file was not created: