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

完成的Spring批处理作业重新开始是否正常?

田鸿彩
2023-03-14

根据Spring batch JobOperator类的重启(executionId)文档,

https://docs.spring.io/spring-batch/4.0.x/api/org/springframework/batch/core/launch/JobOperator.html#restart-long-

重新启动失败或停止的作业执行。如果提供的id不存在或对应于在正常情况下已成功完成的JobInstance,则会出现异常并失败。

我正在尝试使用executionId重新启动已完成的作业JobOperator类能够重新启动批处理作业,即使它已完成。我预计它会抛出一个异常,正如文档所说。这种行为是正常的还是我遗漏了什么?

共有1个答案

郝昊东
2023-03-14

这实际上取决于。

>

  • 你应该使用代码库
  • 您不应该查找ExitStatus,而应该查找BatchStatus。ExitStatus是补充结果
  • 检查你是否有工作的识别参数

    if (execution.getJobParameters().getParameters().size() > 0 && (status == BatchStatus.COMPLETED || status == BatchStatus.ABANDONED)) {
      throw new JobInstanceAlreadyCompleteException(
                        "A job instance already exists and is complete for parameters=" + jobParameters
                        + ".  If you want to run this job again, change the parameters.");
    }
    

  •  类似资料:
    • 我有一个spring批处理作业,从CSV文件读取并写入数据库。我想让它重新启动。例如,如果在读取文件或写入db时出现异常,导致作业失败,则应从失败的同一点/块重新开始,而不是从头开始读取整个文件。 我正在从一个endpoint触发作业启动器,并在我的控制器中配置了它。 目前,我正在通过控制器将参数(这是一个唯一的标识符/数字)传递给作业参数,以运行新的作业实例。如果作业失败,我将使用与GET请求中

    • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

    • 我有一个spring boot应用程序,它应该将数据库(产品)中的一个表导出为文件,所以我使用spring batch来实现这一点,我的问题是,当作业完成时,应用程序重新启动,我认为这是因为spring batch在完成后关闭了实体管理器,但我不确定 注意1:我使用作为Reader。 注意2:我正在使用从controller启动作业 注5:我发现了一个类似问题的问题,但它没有答案和关闭(重复),但

    • 我正在做一个项目,我们正在使用Spring Boot、Spring Batch和Camel。 关于如何在JobExecution数据可用时立即返回它,有什么想法吗?

    • 我们的Spring Batch应用程序在重新启动失败的作业时,再次处理相同的记录,导致重复的行,我们希望了解如何避免这种情况。 启动批处理作业的Spring集成轮询器配置为每两个小时运行一次。第二次运行时,作业参数将相同,但如果上一次运行失败(例如,由于数据截断异常),Spring Batch不会抱怨作业已完成。 在故障点,几十万条记录已经被处理并从源表复制到目标表。在以后运行作业时,相同的行将复

    • 我有一个spring批处理作业,它以给定的间隔扫描SFTP服务器。当它找到一个新文件时,就会开始处理。 它在大多数情况下都可以正常工作,但有一种情况下它不起作用: 用户开始将新文件上传到SFTP服务器 批处理作业检查服务器并找到一个新文件 它开始处理它 但由于文件仍在上载中,因此在处理过程中遇到意外的输入块结尾,并发生错误。 如何在批处理作业处理开始之前检查文件是否已完全上载到SFTP服务器?