当前位置: 首页 > 知识库问答 >
问题:

如何控制spring批处理中的重复和下一步执行

呼延烈
2023-03-14

嗨,我有下面的xml,用于执行作业

<batch:job id="Job1" restartable="false" xmlns="http://www.springframework.org/schema/batch">
        <step id="step1" next="step2">
            <tasklet ref="automate" />
        </step>
        <step id="step2">
            <tasklet ref="drive"  />
            <next on="COMPLETED" to="step3"></next>
        </step>
        <step id="step3">
            <tasklet ref="generate_file"  />
        </step>
    </batch:job>

为此,我编写了一个tasklet来执行脚本。现在我希望,如果脚本执行失败三次,那么下一步将不会执行。但是从Tasklet中,我只能返回将流程转移到下一个步骤的完成和继续过程的可持续。我在这该怎么办。

共有1个答案

莫河
2023-03-14

您可以编写自己的decider,以决定是否要进入下一步或结束工作。如果您能够处理失败,您也可以处理作业的流程

<decision id="validationDecision" decider="validationDecider">
        <next on="FAILED" to="abcStep" />
        <next on="COMPLETE" to="xyzstep" />
    </decision>

配置是

<bean id="validationDecider" class="com.xyz.StepFlowController" />

类是

public class StepFlowController implements JobExecutionDecider{

@Override
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
    FlowExecutionStatus status = null;
    try {
        if (failure) {
status = new FlowExecutionStatus("FAILED");

        }else {
            status = new FlowExecutionStatus("COMPLETE");
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return status;
}
 类似资料:
  • 我有一个spring批处理作业,预计将根据FIFO顺序处理'N'个作业ID。这个Spring批处理作业有5个步骤。 我们使用DECIDER来确定是否有更多的job-id。如果是,请转到第一步并运行该job-id的所有步骤。 我在spring-batch发出的日志中看到“duplicate step”消息,在第一个作业中的步骤(例如job-id=1)获得未知状态之前,该消息似乎没有问题。在这种情况下

  • 我有一个spring批处理工作,比如说5个步骤(

  • 我正在尝试修复Spring Batch中的一个问题,这个问题最近一直困扰着我们的系统。我们有一份工作,在大多数情况下都很好。下载和处理数据是一个多步骤的工作。 问题是有时工作会爆棚。也许我们试图连接到的服务器抛出了错误,或者我们在工作进行到一半时关闭了服务器。此时,下次我们的quartz调度程序尝试运行该作业时,它似乎什么也不做。以下是此作业定义的删节版本: 委婉地说,我是Spring Batch

  • 使用Spring Batch 3.0.4.Release。 我将作业配置为使用分区步骤。从机步骤使用块大小1。任务执行器中有六个线程。我使用从六到数百的各种网格大小来运行这个测试。我的网格大小是从StepExecutions的数量,我希望==我的分区器创建的ExecutionContexts的数量。 下面是Java配置代码:

  • 根据spring batch中的某些条件,是否可以执行一个步骤或跳过它并继续下一步。例如,批处理作业中有5个步骤,在执行每个步骤之前,我们需要根据数据库中某个列的值检查是否跳过它。需求是通过监听器或其他方式创建通用逻辑,以控制运行时的步骤执行? 我需要在运行时填充下一个属性。示例xml: 但它引发了异常:配置问题:元素[step2]无法访问| 我认为spring不允许在运行时绑定下一个属性。请给出

  • 我正在使用jhipster,我想在我的WebApp中集成spring批处理管理控制台。(例如http://localhost:8080/batch-console) 我尝试在我的jhipster webapp中集成以下响应,有没有一种方法可以正确地集成spring-batch-admin和spring-boot?但我得到以下错误(属性似乎未加载) Spring Boot版本:1.4.1.发布Jhi