Как заставить RepositoryItemReader читать только что вставленную или необработанную запись? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть пакетное задание, которое читает записи из базы данных SQL Azure.Сценарий использования: запись базы данных будет выполняться непрерывно, и мое весеннее пакетное задание должно запускаться каждые 5 минут и считывать вновь вставленную запись, которая пока не была получена из последнего задания.Но я не уверен, есть ли встроенный метод в RepositoryItemReader или я должен реализовать для него решение взлома

 @Bean
    public RepositoryItemReader<Booking> bookingReader() {
        RepositoryItemReader<Booking> bookingReader = new RepositoryItemReader<>();
        bookingReader.setRepository(bookingRepository);
        bookingReader.setMethodName("findAll");
        bookingReader.setSaveState(true);
        bookingReader.setPageSize(2);
        Map<String, Sort.Direction> sort = new HashMap<String, Sort.Direction>();
        bookingReader.setSort(sort);
        return bookingReader;
    }

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вам необходимо добавить столбец в вашу базу данных с именем «STATUS».Когда данные вставлены в вашу таблицу, статус должен быть «НЕ обработан».Когда ваш ItemReader читает данные, измените статус на «В ПРОЦЕССЕ», когда ваш ItemProcessor и ItemWriter завершат свою задачу, измените статус на «ОБРАБОТАНО».Таким образом, вы можете убедиться, что ваш ItemReader читает только данные «НЕ ОБРАБОТАНО».

Примечание. Если вы запускаете пакетное задание, используя несколько потоков с помощью Task Executor, используйте синхронизированный метод в вашем считывателе, чтобы прочитать «НЕ»Обработано "записи и изменить статус на" В ПРОЦЕССЕ ". Таким образом, вы можете быть уверены, что несколько потоков не будут извлекать одни и те же данные.

0 голосов
/ 01 мая 2019

Если изменение таблицы не вариант, то другим подходом было бы использовать таблицы метаданных Spring Batch как можно чаще.

Перед выполнением задания вы просто сохраняете метку времени или какой-то другой индикатор в контексте выполнения задания, который сообщает вам, с чего начать на следующей итерации задания.

Это может быть решение «из коробки».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...