Пользовательский FlatFileItemReader продолжает читать предыдущее состояние задания - не сбрасывает linecount - PullRequest
1 голос
/ 21 февраля 2020

В моем случае пакетный запуск запускается / запускается, когда прослушиватель файлов получает файл, и он будет обработан. Слушатель отслеживания файлов снова продолжит поиск следующего файла .. при поступлении нового файла - задание будет запущено во второй раз снова *

Со второго запуска задания (без остановки весенней загрузки / приложения)

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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...