Spring batch SpringBatch:通过JobParameters获取已完成实例的executionid

Spring batch SpringBatch:通过JobParameters获取已完成实例的executionid,spring-batch,Spring Batch,我的软件正在对一些spring批处理作业进行协同绘图。作业的输出部分是下一个作业的输入。可能会重新启动整个流程(整个作业链),即使链中的一个或多个作业已成功完成。在本例中,当我尝试使用相同的参数再次运行其中一个作业时,我会得到一个JobInstanceAlreadyCompletedException,这与预期的一样。我可以跳过并继续下一个作业,但我需要访问已完成实例的上下文,以便获得其步骤生成的输出并将其传递给下一个作业 根据JobExplorer API,如果您拥有已完成实例的executi

我的软件正在对一些spring批处理作业进行协同绘图。作业的输出部分是下一个作业的输入。可能会重新启动整个流程(整个作业链),即使链中的一个或多个作业已成功完成。在本例中,当我尝试使用相同的参数再次运行其中一个作业时,我会得到一个JobInstanceAlreadyCompletedException,这与预期的一样。我可以跳过并继续下一个作业,但我需要访问已完成实例的上下文,以便获得其步骤生成的输出并将其传递给下一个作业


根据JobExplorer API,如果您拥有已完成实例的executionId,这是可能的。我无法从JobInstanceAlreadyCompletedException获取它,而且似乎没有API可以从已使用的参数列表获取它。您知道在给定参数的情况下获取此executionId的方法吗?或者以任何方式访问已完成的实例作业上下文?

为什么不将所有这些作业放在一个主作业中,并使用作业步骤集成作业?这样,已完成的子对象将被视为已完成的步骤,不会再次启动。此外,即使重新启动,作业/步骤上下文中的所有信息都可用


另一种方法是将所有需要的参数和信息保存到一个文件中,并使用该文件启动下一个作业,而不是依赖于作业执行信息。您的最后一步可以是编写适当属性文件的tasklet。

我无法在唯一/单个spring批处理宏作业中对其进行流式处理,因为单个作业在不同的网络区域中运行,并且我有不允许这样做的安全限制(即使我愿意。假设这在技术上是可能的,但我会违反一些公司政策…)关于你的第二个建议。你基本上建议将所有作业生成的信息与存储系统(即文件)中的作业实例参数值一起转储在第二次运行请求时,使用参数值作为键来获取生成的信息?据我所知,您需要控制信息,这些信息必须在不同系统/安全区域上的不同作业之间进行交换。我进一步了解,这些信息中的一些通常作为jobpar提供jobexecution/stepexecution中的参数或数据。尝试从批处理表中获取此信息对我来说有点尴尬。通过其他作业可以访问的属性文件或甚至数据库中的特殊表来交换此信息对我来说更容易。开始时的tasklet和结束时的tasklet可以获得job完成了。