Как зарегистрировать ItemListener для CompositeItemProcessor - PullRequest
1 голос
/ 29 марта 2019

Я хочу передать некоторые данные от одного шага к другому, скажем, от шага 1 к шагу 2. Я передал данные в ExecutionContext в шаге 1. На шаге 2 я пытаюсь восстановить данные с помощью @beforeStep, который получает JobExecution.

Однако step_2 ссылается на CompositeItemProcessor, который, по-видимому, не зарегистрирован как слушатель по умолчанию. Как я могу зарегистрировать ItemProcessListener только для одного процесса CompositeItemProcessor для восстановления JobExecution (чтобы затем восстановить данные из step_1)?

1 Ответ

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

Чтобы зарегистрировать любого слушателя, вы можете перечислить слушателей в своей работе - внутри шага, а затем, когда вы реализуете слушателя, - вы можете реализовать определенных слушателей

  <bean id="customItemProcessListener" 
          class="com.listeners.CustomItemProcessListener" />

     <job id="myJob" xmlns="http://www.springframework.org/schema/batch">
        <step id="step2">
            <tasklet>
            <chunk reader="reader" writer="writer"
                commit-interval="1" />
                <listeners>
                <listener ref="customItemProcessListener" />
                </listeners>
            </tasklet>
        </step>
        </job>

и тогда вы сможете реализовать процессор

    public class CustomItemProcessListener implements ItemProcessListener<T> {

    @Override
    public void beforeProcess(T items) {
        System.out.println("ItemProcessListener - beforeProcess");
    }

    @Override
    public void afterProcess(T items , S result) {
        System.out.println("ItemProcessListener - afterProcess");
    }

    @Override
    public void onProcessError(T items , Exception exception) {
        System.out.println("ItemProcessListener - onProcessError ");
    }

}
...