Возможно ли иметь несколько читателей для одного шага в весенней партии?

Мне нужно создать весенний пакет, в котором мне нужно получить данные из двух разных таблиц. Это будет часть для чтения.

Проблема в том, что мне нужно иметь 2 запроса читателя. И только один из них будет вызван по условию. Но писатель будет тот же. Таким образом, тасклет становится таким же в основном.

Могу ли я иметь 2 считывателя внутри одного шага, который будет вызываться в соответствии с условием..??

Что-то вроде внутри весеннего пакета xml:

if (condition)
then reader1
else reader2


...
....
......


<reader1 id = ".." class = "..">

</reader1>

.....
........

<reader2 id = ".." class = "..">

</reader2>

only one of them will be called based on the condition: На чем основано это состояние? Параметр работы? Системное свойство? Что-то рассчитано на предыдущем шаге? Я не вижу необходимости иметь два считывателя в вашем случае, это вопрос конфигурации ИМО.
Mahmoud Ben Hassine 16.12.2020 10:58
0
1
833
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рассматривали ли вы возможность использования шаблонов потока условного управления, предлагаемых Spring Batch? Я думаю, что это могло бы привести к более простой конструкции и придерживаться некоторых основных шаблонов, которые поощряет весенняя партия.

Вы в основном программируете «условие», при котором вы хотите, чтобы шаг вызывался. Итак, определите два шага, скажем, step1, у которого есть считыватель, процессор, писатель для одного типа объекта и step2, у которого есть считыватель, процессор, писатель для другого типа. Возможно, писатели также являются общими для разных типов. Затем вы можете определить поток управления следующим образом:

    @Bean
    public Job myJob() {
        JobBuilder jobBuilder = jobs.get("Spring Batch: conditional steps");
     
        return jobBuilder.start(determineRoute())
                             .on("item1").to(flow1())
                             .on("item2").to(flow2()).end()
                         .build();
                 
    }

В примере determineRoute() — это тасклет, который возвращает настраиваемые значения ExitStatus item1 или item2 и flow1, а flow2 — разные потоки (или шаги) для обработки каждого объекта.

См. здесь в их документах: https://docs.spring.io/spring-batch/docs/current/reference/html/step.html#conditionalFlow

Обновлено: вы также можете сделать что-то подобное с помощью JobExecutionDeciderhttps://www.baeldung.com/spring-batch-conditional-flow#2-programmatic-branching-withjobexecutiondecider

Другие вопросы по теме