Java Spring引导批始终重新启动失败的作业,即使使用新作业参数也是如此
我在SpringBoot中配置了一个简单的Spring批处理作业。这与入门指南中的相同。我正在使用SQLServer持久化Spring批处理元数据和业务数据 我使用命令行参数Java Spring引导批始终重新启动失败的作业,即使使用新作业参数也是如此,java,spring-boot,spring-batch,Java,Spring Boot,Spring Batch,我在SpringBoot中配置了一个简单的Spring批处理作业。这与入门指南中的相同。我正在使用SQLServer持久化Spring批处理元数据和业务数据 我使用命令行参数fileName=error.csv执行作业,作业失败并出现预期的错误。然后,我使用命令行参数fileName=working.csv执行作业,然后再次执行上一个失败的作业。忽略不同的参数。获取具有不同参数的作业以运行的唯一方法是确保已修复失败的作业并成功运行 这在SpringBootStarter版本1.5.9中非常有效,
fileName=error.csv
执行作业,作业失败并出现预期的错误。然后,我使用命令行参数fileName=working.csv
执行作业,然后再次执行上一个失败的作业。忽略不同的参数。获取具有不同参数的作业以运行的唯一方法是确保已修复失败的作业并成功运行
这在SpringBootStarter版本1.5.9中非常有效,使用SpringBatch版本3.0.8,我可以使用不同的参数运行一个新作业,而失败的作业仍然没有修复。当我使用SpringBatch版本4.0.1升级到SpringBootStarter版本2.0.1时,问题就出现了
当数据库中存在状态为失败的作业时,是否可以使用不同的参数启动新作业
编辑:
我追溯到了弹簧靴。
在版本2.0.0.M5中,它按预期工作。
在版本2.0.0.M6中,问题首次出现
版本2.0.0.M5在JobLauncherCommandLineRunner类中使用了getNextJobParameters方法。
此方法获取上一个作业的作业参数,并将当前作业的参数添加到映射中。
这意味着如果参数值相同,则使用当前作业的参数
版本2.0.0.M6将JobLauncherCommandLineRunner更改为在JobParametersBuilder类中使用getNextJobParameters方法。
此方法始终使用上一个作业的作业参数
现在的问题是:其中哪一个是正确的设计,以及如何实现与2.0.0.M5版本相同的结果
我还打开了一个对话框来澄清这个问题。我也对Jira问题发表了评论,但您能否提供执行作业所使用的实际命令?您所指的代码更改只是将代码块从一个地方移动到另一个地方,但是代码本身应该保持不变。我正在使用以下命令启动作业:导致预期错误的第一个作业:
java-jar myjar.jar parm=0 fileName=error.csv
重新启动第一个作业而不是启动新作业实例的第二个作业:java-jar myjar.jar parm=1 fileName=new.csv
代码从一个地方搬到另一个地方,但也发生了变化。我在JIRA中提供了更多信息。