В моем случае пакетный запуск запускается / запускается, когда прослушиватель файлов получает файл, и он будет обработан. Слушатель отслеживания файлов снова продолжит поиск следующего файла .. при поступлении нового файла - задание будет запущено во второй раз снова *
Со второго запуска задания (без остановки весенней загрузки / приложения)
Flatfileitemreader не читает файл из первой строки - потому что счетчик строк и количество элементов не сбрасываются для flatfileitemreader,
Счетчик выбирается из того места, откуда он ушел для первого задания, и возвращает null и задание завершено без обработки.
Пример: если в моем первом текстовом файле задания есть 2 записи, а во втором текстовом файле задания есть 2 записи. первый файл будет обработан, и lineFount для flatFileItemReader будет равен 2, а itemcount будет равен 2. Второй файл при поступлении - flatfileitemreader считывает linecount как 3 и itemcount как 3, где не будет записей и возвращает ноль, и никакие записи не будут обработаны.
Любые советы по решению этой проблемы - Заранее спасибо.
Добавлен отрывной код пользовательского считывателя элементов.
@Component
public class UploadItemReader<T> implements ItemReader<T> {
@Autowired
private Utility Utility;
@Autowired
private AdaptiveFieldSetMapper<?> adaptiveFieldSetMapper;
private FlatFileItemReader<T> flatFileItemReader = new FlatFileItemReader<T>();
private DetailsWrapper Detailswrapper;
@Override
public synchronized T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
System.out.println("Reader Thread ID : " + Thread.currentThread().getId() + " Reader Thread Name : " + Thread.currentThread().getName());
String Id = Utility.extractIdFromPath();
Detailswrapper = getDetails(Id);
flatFileItemReader.setResource(new FileSystemResource(Utility.getCurrentDirectory()));
flatFileItemReader.setLineMapper(this.getLineMapper());
flatFileItemReader.open(new ExecutionContext());
return flatFileItemReader.read();
}
public LineMapper<T> getLineMapper() {
DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
lineTokenizer.setDelimiter(Detailswrapper.getDelimiter());
DefaultLineMapper<T> lineMapper = new DefaultLineMapper<T>();
lineMapper.setLineTokenizer(lineTokenizer);
lineMapper.setFieldSetMapper((FieldSetMapper<T>) adaptiveFieldSetMapper);
return lineMapper;
}
}