根据spring batch中的某些条件,是否可以执行一个步骤或跳过它并继续下一步。例如,批处理作业中有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不允许在运行时绑定下一个属性。请给出建议。
我实现了这个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批次问题。要求如下: 我有两个主要步骤: 第一个从oracle数据库中读取一些数据,从一个表中写入另一个表 第二个基于第一步处理的数据,完成其他一些数据库工作 从设计的角度来看,第一步如下所示: 复合项目编写器: 虽然前两位作者并不复杂,但我的兴趣集中在第三位。 正如您可能已经猜到的,这一个将用于获取之前正在处理的一些数据,以便在我的第二步中进行升级: 问
我正在尝试修复Spring Batch中的一个问题,这个问题最近一直困扰着我们的系统。我们有一份工作,在大多数情况下都很好。下载和处理数据是一个多步骤的工作。 问题是有时工作会爆棚。也许我们试图连接到的服务器抛出了错误,或者我们在工作进行到一半时关闭了服务器。此时,下次我们的quartz调度程序尝试运行该作业时,它似乎什么也不做。以下是此作业定义的删节版本: 委婉地说,我是Spring Batch
我可以在xml配置中使用而没有任何问题,但如果将其用作如下注释。它会抛出以下错误 原因:组织。springframework。豆。工厂UnsatisfiedDependencyException:创建在类路径资源[BatchConfiguration.class]中定义的名为“step1”的bean时出错:通过索引1为[org.springframework.batch.item.ItemRead
我试图从步骤(实现接口Tasklet的类的execute方法)内部启动作业。 显然我收到了例外 Java语言lang.IllegalStateException:在JobRepository中检测到现有事务 如何使Spring批处理步骤不是事务性的? 有人能解决我从一步内启动工作的主要需求吗? 提前感谢您的帮助!
使用Spring Batch 3.0.4.Release。 我将作业配置为使用分区步骤。从机步骤使用块大小1。任务执行器中有六个线程。我使用从六到数百的各种网格大小来运行这个测试。我的网格大小是从StepExecutions的数量,我希望==我的分区器创建的ExecutionContexts的数量。 下面是Java配置代码:
嗨,我有下面的xml,用于执行作业 为此,我编写了一个tasklet来执行脚本。现在我希望,如果脚本执行失败三次,那么下一步将不会执行。但是从Tasklet中,我只能返回将流程转移到下一个步骤的完成和继续过程的可持续。我在这该怎么办。