有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SpringBatch步骤不再执行:步骤已完成或无法重新启动

我有一个单步springbatch应用程序。工作内容如下:

@Bean
public Job databaseCursorJob(@Qualifier("databaseCursorStep") Step exampleJobStep,
                             JobBuilderFactory jobBuilderFactory) {
    return jobBuilderFactory.get("databaseCursorJob")
            .incrementer(new RunIdIncrementer())
            .flow(exampleJobStep)
            .end()
            .build();
}

我从springboot应用程序开始工作。今天下午,我试图为这份工作增加第二步。基本上如下:

@Bean
public Job databaseCursorJob(@Qualifier("databaseCursorStep") Step exampleJobStep,
                             JobBuilderFactory jobBuilderFactory) {
    return jobBuilderFactory.get("databaseCursorJob")
            .incrementer(new RunIdIncrementer())
            .flow(exampleJobStep).next(partitionStep())
            .end()
            .build();
}

换句话说,,只是添加了“next(partitionStep())。但是,自从我这样做之后,作业就没有执行任何步骤就完成了(请参见下面的shell输出)。事实上,即使在删除第二步并返回到原始作业后,它仍拒绝执行该步骤。在尝试添加第二步之前,我从未遇到过这个问题。我甚至重新启动了我的虚拟机,但它仍然跳过了这一步。在我解决这个问题之前,我已经死在水里了。感谢您的见解。谢谢

2020-09-01 14:49:00.260  INFO 6913 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8087 (http) with context path ''
2020-09-01 14:49:00.263  INFO 6913 --- [           main] f.p.r.Application    : Started Application in 7.752 seconds (JVM running for 9.092)
2020-09-01 14:49:00.268  INFO 6913 --- [           main] o.s.b.a.b.JobLauncherCommandLineRunner   : Running default command line with: []
2020-09-01 14:49:00.579  INFO 6913 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=databaseCursorJob]] launched with the following parameters: [{}]
2020-09-01 14:49:00.698  INFO 6913 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Step already complete or not restartable, so no action to execute: StepExecution: id=120, version=4, name=databaseCursorStep, status=COMPLETED, exitStatus=COMPLETED, readCount=1, filterCount=0, writeCount=1 readSkipCount=0, writeSkipCount=0, processSkipCount=0, commitCount=2, rollbackCount=0, exitDescription=
2020-09-01 14:49:00.730  INFO 6913 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=databaseCursorJob]] completed with the following parameters: [{}] and the following status: [COMPLETED]

共 (1) 个答案

  1. # 1 楼答案

    我的问题是,如果出现错误或处于未知状态,我的工作将无法恢复。该步骤不是“已经完成”,它从未完成。其状态仍为“已启动”,退出代码为“未知”,因为它从未退出。无论如何,我的作业存储库不在内存中,而是被捕获到一个本地数据库中,这就是为什么即使在重启VM后它也无法自行解析的原因(为我没有记住这一点而感到羞耻)。所以,我可以通过清除工作实例历史来修复,但那是一个创可贴。我仍然需要修复代码以防止再次发生

    我还了解到,我可以通过检查数据库中的作业存储库进行诊断(全部都在那里)

    我真的解决了这个问题,感谢哈辛先生,他在上面多次作出回应,为我指明了正确的方向。他在第一次答复中提供的联系确实涉及到今后预防的解决办法:Spring Batch error (A Job Instance Already Exists) and RunIdIncrementer generates only once