我在Spring Boot中配置了一个简单的Spring Batch作业。它与Getting Starte指南中的Creating a Batch Service相同。我使用SQLServer来持久化Spring批量元数据和业务数据。
我使用命令行参数fileName=error.csv
执行作业,作业失败并出现错误。然后,我使用命令行参数fileName=working.csv
执行作业,然后再次执行先前失败的作业。忽略不同的参数。获取具有不同参数的作业的唯一方法是确保失败的作业已修复并成功运行。
这在使用Spring批处理版本3.0.8的spring-boot-starter版本1.5.9中完美地工作,我可以运行具有不同参数的新作业,而失败的作业仍未修复。当我使用Spring批处理版本4.0.1升级到spring-boot-starter版本2.0.1时,会出现此问题。
当数据库中存在状态失败的作业时,是否可以使用不同的参数启动新作业?
修改
我追溯到Spring启动。 在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来澄清这个问题。