2016-12-22 3 views
0

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

Мне нужно заполнить следующий атрибут во время выполнения. Пример XML:

<batch:step id="step1" next="stepdecision"> 
     <batch:tasklet ref="tasklet1" /> 
    </batch:step> 

    <batch:step id="step2" next="stepdecision"> 
     <batch:tasklet ref="tasklet1" /> 
    </batch:step> 

    <batch:step id="step3" next="stepdecision"> 
     <batch:tasklet ref="tasklet1" /> 
    </batch:step> 

    <batch:step id="step4" next="stepdecision"> 
     <batch:tasklet ref="tasklet1" /> 
    </batch:step> 

    <batch:decision id="stepdecision" decider="decider"> 
     <batch:next on="next" to="#{jobExecutionContext[nextStep]}" /> 
    </batch:decision> 

</batch:job> 

<bean id="decider" class="com.bmo.apms.batch.StepFlowDecider"> 
</bean> 
<bean id="tasklet1" class="com.bmo.apms.batch.TestTasklet" /> 

Но это бросает исключение: проблема конфигурации: Элемент [Step2] недоступен |

Я думаю, что весна не позволяет связать следующий атрибут во время выполнения. Пожалуйста, совет.

+0

http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/core/job/flow/JobExecutionDecider.html –

ответ

0

Я достиг этого b, создавая решение, которое находит следующий шаг. Следующим атрибутом каждого шага является его решение, которое переводит его на фактический шаг во время выполнения.

<batch:decision id="stepdecision" decider="decider"> 
     <batch:next on="step1" to="step1" /> 
     <batch:next on="step2" to="step2" /> 
     <batch:next on="step3" to="step3" /> 
     <batch:next on="step4" to="step4" /> 
     <batch:end on="end" /> 
    </batch:decision> 


<batch:next on="step3" to="step3" /> 
     <batch:next on="step4" to="step4" /> 
     <batch:end on="end" /> 
    </batch:decision> 

    <batch:step id="step1" next="stepdecision"> 
     <batch:tasklet ref="tasklet1" /> 
    </batch:step> 

    <batch:step id="step2" next="stepdecision"> 
     <batch:tasklet ref="tasklet1" /> 
    </batch:step> 

    <batch:step id="step3" next="stepdecision"> 
     <batch:tasklet ref="tasklet1" /> 
    </batch:step> 

    <batch:step id="step4" next="stepdecision"> 
     <batch:tasklet ref="tasklet1" /> 
    </batch:step> 
0

Не настраивайте следующее значение во время выполнения. Настройте то, что возвращает Decider во время выполнения. В этом весь смысл решения.

Смежные вопросы