Я работаю над приложением Spring Batch, в котором я реализовал логи прослушивателя / наблюдателя файлов c, которые будут выбирать вновь помещенные файлы (любого типа) из каталога и обрабатывать их, читая и записывая в БД.
Я попытался прочитать и вставить два текстовых файла с n количеством записей в каждом файле, когда я читаю и вставляю первый файл, он правильно читает и вставляет в БД, но когда я помещаю второй файл в слушатель / каталог наблюдателя файла, его выбор этого файла и чтение из числа строк, где он остановился первым файлом. так что flatFileItemReader.read () всегда возвращает ноль.
@Override
public synchronized T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
try {
String interfaceId = xtremeUtility.extractInterfaceIdFromNFSPath();
interfaceOrignatDetailswrapper = getOriginatDetails(interfaceId);
flatFileItemReader.setResource(new FileSystemResource(xtremeUtility.getCurrentDirectory()));
flatFileItemReader.setLineMapper(this.getLineMapper());
flatFileItemReader.afterPropertiesSet();
flatFileItemReader.open(new ExecutionContext());
} catch(ParseException exception) {
exception.printStackTrace();
} catch(NonTransientResourceException exception) {
exception.printStackTrace();
} catch(UnexpectedInputException exception) {
exception.printStackTrace();
} catch(Exception exception) {
exception.printStackTrace();
throw exception;
}
return flatFileItemReader.read();
}
******* FlatFileItemReader -applyRecordSeparatorPolicy имеет ошибку ***** *** - не найден фрагмент кода, который обрабатывает сброс индекса числа строк в файле при обработке нового файла.
private String applyRecordSeparatorPolicy(String line) throws IOException {
String record = line;
while (line != null && !recordSeparatorPolicy.isEndOfRecord(record)) {
line = this.reader.readLine();
if (line == null) {
if (StringUtils.hasText(record)) {
// A record was partially complete since it hasn't ended but
// the line is null
throw new FlatFileParseException("Unexpected end of file before record complete", record, lineCount);
}
else {
// Record has no text but it might still be post processed
// to something (skipping preProcess since that was already
// done)
break;
}
}
else {
lineCount++;
}
record = recordSeparatorPolicy.preProcess(record) + line;
}
return recordSeparatorPolicy.postProcess(record);
}
Любая помощь будет отличной, спасибо заранее !!
