为什么JobExecutionDecider为decision方法提供了stepExecution?

时间:2017-08-23 21:27:31

标签: spring-batch

根据我的经验,当调用decider时,此stepExecution总是为null。似乎JobExecutionDecider与提供给决策方法的作业执行相关联,但由于作业决策程序不依赖于任何单个步骤,因此不会执行步骤执行。

有什么我想念的吗?有没有其他方法可以使用JobExecutionDecider,其中stepExecution不会为空?

2 个答案:

答案 0 :(得分:1)

我不确定为什么stepExecution总是null,因为你没有发布你的配置,你的问题也不是很清楚。

话虽如此,请参考official documentation中说明的情况,在配置中解释如果执行转到step2step3取决于someCondition

someCondition可能还会依赖于step1执行,即您可能正在使用此步骤1 - stepExecution来制作someCondition truefalse

这完全取决于你的条件可能是什么以及它可能会使用什么但是根据这个例子,stepExecution不会为null,因为在step1停止执行并且执行可用之后进行了评估。

另外,引用,

  

在某些情况下,可能会有比ExitStatus更多的信息   需要决定下一步执行哪个步骤

这意味着默认情况下框架已经使用了这种仅基于步骤ExitStatus的决策程序。您可以在此处覆盖该逻辑,以便在做出该决定时使用其他列。

另外,引用API docs

  

根据正在进行的状态分支执行的策略   JobExecution。返回值将用作确定的状态   工作的下一步。

正在进行的JobExceution是一个包含镫骨刺激的主容器。

另外,根据源代码的JavaDoc,@param stepExecution the latest step execution (may be null)

希望它有所帮助!!

答案 1 :(得分:0)

即使我在代码中也看到过同样的事情。但是我猜想,如果您将决策者步骤用作工作的第一步,它将为空;如果您将决策者步骤用作任何其他步骤而不是第一步,它将不会为空。因为我认为spring使用StepExecution作为媒介来在工作的各个步骤之间传递数据。