У меня есть работа с тремя шагами, как показано ниже:
<job id="SomeJob" xmlns="http://www.springframework.org/schema/batch">
<step id="deciderTaskLet" xmlns="http://www.springframework.org/schema/batch">
<tasklet ref="deciderTaskLetRef"/>
<next on="step1" to="step1"/>
<next on="step2" to="step2"/>
<end on="FAILED"/>
</step>
<step id="step1" xmlns="http://www.springframework.org/schema/batch">
<tasklet>
<chunk reader="step1Reader" processor="step1Processor"
writer="dummyWriter" commit-interval="1">
</chunk>
<listeners>
<listener ref="step1Reader"/>
<listener ref="step1Processor"/>
</listeners>
</tasklet>
</step>
<step id="step2" xmlns="http://www.springframework.org/schema/batch">
<tasklet>
<chunk reader="step2Reader" processor="step2Processor"
writer="dummyWriter" commit-interval="1">
</chunk>
<listeners>
<listener ref="step2Reader"/>
<listener ref="step2Processor"/>
</listeners>
</tasklet>
</step>
</job>
Шаг первый:
Это Tasklet
, который решает, на каком шаге должен идти поток,
Шаг 2 или Шаг 3
Работает нормально.Здесь нет проблем
Шаг второй:
Это шаг, который читает записи и обрабатывает их как единое целое.
Это работает нормально.Здесь нет проблем
Шаг третий:
Здесь есть ловушка:
Reader
будет читать записи и передавать их processor
одинна один
Но если запись удовлетворяет некоторому условию (некоторая бизнес-логика):
Эта запись должна быть обработана в шаге 2. Средство чтенияи процессор этого шага должен называться изнутри шага 3
И это будет В расчете на основание
Можем ли мы этого достичь?
Я искал на форумах, но, похоже, все решения основаны на afterStep
То есть логика принятия решения будет запущена ПОСЛЕ ШАГА завершается. Но мы хотим, чтобы логика принятия решения срабатывала, когда ВНУТРИ шага
Кто-нибудь может помочь?