在 spring 批次中控制步级执行
Control step level execution in spring batch
是否可以根据 spring 批处理中的某些条件执行一个步骤或跳过它并继续下一步。
例如。批处理作业有 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]|
我认为 spring 不允许在 运行 时绑定下一个属性。
请指教
不要在运行时配置下一个值。配置 Decider
将在运行时 return 的内容。这就是决策者的全部意义。
我实现了这个 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>
是否可以根据 spring 批处理中的某些条件执行一个步骤或跳过它并继续下一步。 例如。批处理作业有 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]|
我认为 spring 不允许在 运行 时绑定下一个属性。 请指教
不要在运行时配置下一个值。配置 Decider
将在运行时 return 的内容。这就是决策者的全部意义。
我实现了这个 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>