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

Spring批处理-执行一步后退或重新执行以前执行的步骤

谭锐藻
2023-03-14

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

beforeStep()postStep()用于所有步骤。

我的问题是,如果我当前使用的是beforeStep()方法,并且要执行的步骤是step2,我可以让spring batch再次执行step1?执行step1后,流程应继续执行step2step3等。。

为了再次澄清,我可以告诉spring-批再次从之前执行的步骤“开始执行”吗?


共有2个答案

淳于星宇
2023-03-14

您可以使用以下方法实现步骤的特定顺序。

<step id="step1" next="step3">
<tasklet>(...)</tasklet>
</step>

Next参数将定义下一步将执行哪个。但是我不确定您是否可以在相同的执行中后退。但是如果您使用

完成后允许启动

到真的。

对于构建工作流,请查看http://docs.spring.io/spring-batch/2.2.x/apidocs/org/springframework/batch/core/job/builder/FlowBuilder.SplitBuilder.html

希望这有帮助。

叶文博
2023-03-14

虽然我可能不推荐这种行为,但它应该能够完成。您需要做的是配置step2以使用正确的退出代码过渡到step1,并且step1需要能够重新运行。

配置

<step id="step1" next="step2">
    <tasklet ref="someTasklet" allow-start-if-complete="true"/>
</step>
<step id="step2">
    <tasklet ref="someOtherTasklet"/>
    <listeners>
        <listener ref="loopingListener"/>
    </listeners>
    <next on="BACK" to="step1"/>
</step>

密码

public class LoopingListener extends StepExecutionListenerSupport {

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

  • 我正在做一个包括Spring批处理的项目,在复制代码片段之前,我要简单地总结一下这项工作是如何使用cron的。 cron在我的项目上调用restapi(@PostMapping(“/jobs/external/{jobName}”) 在post方法中,我获取作业并执行它 在每次执行中,我都应该执行一个步骤 该步骤包含一个读卡器(对弹性API的外部rest调用以获取文档)和一个处理器 现在我的问题是

  • 我对spring batch基本上是新手。第一步,我从SFTP服务器获取一个文件,并使用JSch将其传输到本地目录。第二步,我读取本地目录中的文件,并将内容写入数据库。问题在于,在某些情况下,只执行saveDruchAltransaction(步骤2),而不执行getRemoteFile(步骤1) 配置类: 读者: 作家: 微线程: 我不知道该怎么做...我一直在尝试我从各地找到的东西。请帮忙谢谢

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

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