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

在Spring启动批处理中使用JobExecutionClader

秋光熙
2023-03-14

几个月前,我用Spring Batch制作了一个项目。

该项目工作正常,包括JobExecution决策器的实现

public class BatchDecider implements JobExecutionDecider {
private static final Logger log = LoggerFactory.getLogger(BatchDecider.class);

@Autowired
ConfigurationServiceWs config;

public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {

    if (codition) {

        return new FlowExecutionStatus("AGAIN");
    } else {

        return new FlowExecutionStatus("FINISH");
    }
}

这使fini仅与Spring Batch配合使用。

现在我必须将其用于Spring Boot批处理。在决策步骤之前,所有流程都运行良好。其中,我返回了良好的FlowExecutionStatus,但我不知道为什么,作业以“失败”状态完成。

2017-01-19 17:11:35.347 DEBUG 23056 --- [nio-8081-exec-1] o.s.b.core.job.flow.support.SimpleFlow   : Completed state=Global Job.decision0 with status=AGAIN
2017-01-19 17:11:39.074 DEBUG 23056 --- [nio-8081-exec-1] o.s.b.core.job.flow.support.SimpleFlow   : Handling state=Global Job.FAILED
2017-01-19 17:11:41.002 DEBUG 23056 --- [nio-8081-exec-1] o.s.b.core.job.flow.support.SimpleFlow   : Completed state=Global Job.FAILED with status=FAILED
2017-01-19 17:11:43.170 DEBUG 23056 --- [nio-8081-exec-1] o.s.batch.core.job.AbstractJob           : Job execution complete: JobExecution: id=0, version=1, startTime=Thu Jan 19 17:11:12 CET 2017, endTime=null, lastUpdated=Thu Jan 19 17:11:12 CET 2017, status=FAILED, exitStatus=exitCode=FAILED;exitDescription=, job=[JobInstance: id=0, version=0, Job=[Global Job]], jobParameters=[{time=1484842272108}]

有人知道为什么不工作了?

谢谢

共有1个答案

殷宇
2023-03-14

我找到了解决办法。

我正在使用决策器在我的工作上循环。

我用的是:

@Bean(name = "myJob")
public Job importUserJob() {
    return jobBuilderFactory.get("Global Job")
            .incrementer(new RunIdIncrementer())
            .flow(getListeDocMiseADispo())
            .next(decider).on("FINISH").end()

            .next(boucle())
            .next(decider).on("AGAIN").to(boucle())

            .end()
            .build();
}

工作就是这样:

@Bean(name = "myJob")
public Job importUserJob() {
    return jobBuilderFactory.get("Global Job")
            .incrementer(new RunIdIncrementer())
            .flow(getListeDocMiseADispo())
            .next(decider).on("AGAIN").to(boucle())
            .next(decider).on("FINISH").end()

            .next(boucle())
            .next(decider).on("AGAIN").to(boucle())

            .end()
            .build();
}

但我不知道为什么。也许,Spring boot batch starter会更新我的批处理版本并打破它?

有人知道一些事情。

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

  • 我需要从远程SFTP服务器下载一个文件,并使用spring batch处理它们。我已经实现了使用Spring集成下载文件的代码。但我无法从Spring集成组件启动Spring批处理作业。我有以下代码: 但这不起作用(上一个方法中的错误),因为找不到文件类型的bean。我不能把这两部分连在一起。如何连接集成和批处理?

  • 我有一个正在工作的Spring Boot/批处理项目,包含2个作业。 我现在尝试添加集成,仅使用java配置/java DSL从远程SFTP轮询文件,然后启动作业。 文件轮询工作正常,但我不知道如何在我的流中启动作业,尽管阅读了以下链接: 一些代码段: 对于.handle(“FileMessageToJobRequest”,“ToRequest”),我使用的是http://docs.spring.

  • 是否可以配置Spring批处理管理员来启动主作业和从作业。我们有一个进程作为主节点和3-4个从节点。 Spring batch admin在单独的JVM进程中运行,但所有Spring批处理作业都使用相同的批处理数据库模式。

  • 我将为消息实现断路器模式。基本要求是,如果微服务无法将消息发布到发布主题,则应停止接受来自其他 Kafka 主题的消息。当发布主题可用时,微服务应开始接受来自其他 Kafka 主题的消息。 有没有一种方法可以在Spring BootKafka Streams中实现这一点?

  • 我正在编写Spring批的Spring Boot应用程序,其中ItemReader从Oracle数据库读取数据并将数据写入postgres sql,但我得到了以下错误 我不想创建spring批处理元数据表,我的应用程序不需要监视作业,请就此向我提出建议。提前谢谢!!