Можно ли получить общее количество строк, записанных из FlatFileItemWriter.headerCallback()
?
Я - nubee-пакетник, и я посмотрел на , помещая количество строк в заголовок плоского файла и Spring Batch - Подсчет обработанных рядов . Однако я не могу реализовать логи c, используя приведенный там совет. Имеет смысл подсчет писателя, который будет доступен только после обработки файла. Однако я пытаюсь подсчитать количество строк непосредственно перед тем, как файл будет официально записан.
Я попытался найти хук типа @AfterStep
и захватить все строки, но я продолжаю идти кругами.
@Bean
@StepScope
public FlatFileItemWriter<MyFile> generateMyFileWriter(Long jobId,Date eventDate) {
String filePath = "C:\MYFILE\COMPLETED";
Resource file = new FileSystemResource(filePath);
DelimitedLineAggregator<MyFile> myFileLineAggregator = new DelimitedLineAggregator<>();
myFileLineAggregator.setDelimiter(",");
myFileLineAggregator.setFieldExtractor(getMyFileFieldExtractor());
return new FlatFileItemWriterBuilder<MyFile>()
.name("my-file-writer")
.resource(file)
.headerCallback(new MyFileHeaderWriter(file.getFilename()))
.lineAggregator(myFileLineAggregator)
.build();
}
private FieldExtractor<MyFile> getMyFileFieldExtractor() {
final String[] fieldNames = new String[]{
"typeRecord",
"idSystem"
};
return item -> {
BeanWrapperFieldExtractor<MyFile> extractor = new BeanWrapperFieldExtractor<>();
extractor.setNames(fieldNames);
return extractor.extract(item);
};
}
Уведомление Я использую класс MyFileHeaderWriter.java
(ниже) в headerCallback(new MyFileHeaderWriter(file.getFilename()))
(выше). Я пытаюсь инициализировать значение qtyRecordsCreated
ниже.
class MyFileHeaderWriter implements FlatFileHeaderCallback {
private final String header;
private String dtxCreated;
private String tmxCreated;
private String fileName;//15 byte file name private String qtyRecordsCreated;//number of rows in file including the header row
MyFileHeaderWriter(String sbfFileName) {
SimpleDateFormat dateCreated = new SimpleDateFormat("YYDDD");
SimpleDateFormat timeCreated = new SimpleDateFormat("HHMM");
Date now = new Date();
this.dtxCreated = dateCreated.format(now);
this.tmxCreated = timeCreated.format(now);
this.fileName = sbfFileName; this.qtyRecordsCreated="";
String[] headerValues = {dtxCreated,tmxCreated,fileName,qtyRecordsCreated};
this.header = String.join(",", headerValues);
}
@Override
public void writeHeader(Writer writer) throws IOException {
writer.write(header);
}
}
Как узнать количество строк в строке заголовка? Можно ли использовать FlatFileFooterCallback
для получения количества строк и последующего обновления заголовка числом строк в файле?