Spring批处理如何在循环中运行作业直到满足条件?

时间:2018-03-24 23:23:24

标签: java spring spring-boot spring-batch batch-processing

<job id="firstJob" restartable="true"
    xmlns="http://www.springframework.org/schema/batch">
    <step id="FirstStep">
        <tasklet>
            <chunk reader="read" writer="write"
                commit-interval="1" />
        </tasklet>
    </step>
</job>



<job id="second_job" restartable="false"
    xmlns="http://www.springframework.org/schema/batch">
    <step id="second_step" ">
        <tasklet>
            <chunk reader="reader_again" writer="writera_gain"
                commit-interval="500" />
        </tasklet>      
</job>

我这里有两份工作(实际代码中有3份)。我想运行第一个作业来检查数据库中的某些值,并且只有在找到该值时才执行。为此,我希望它继续循环,直到它可以找到数据,然后继续。我怎么能通过Spring Batch xml来做到这一点?有更好的方法吗?

此外,由于代码库的大小,我无法更改结构,即将两个作业分为两个步骤。

1 个答案:

答案 0 :(得分:2)

是可以使用“外化流程定义”将一个作业的控制流程定向到另一个作业。您可以在第一个作业中使用While(条件),然后指定流程以达到第二个作业

一种方法是简单地将流声明为对其他人的引用:

defp deps do
    [
      {:phoenix, "~> 1.3.0"},
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_ecto, "~> 3.2"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.10"},
      {:phoenix_live_reload, "~> 1.0", only: :dev},
      {:gettext, "~> 0.11"},
      {:cowboy, "~> 1.0"},
      {:comeonin, "~> 4.0"},
      {:elixir_make, "~> 0.4.1"},
      {:bcrypt_elixir, "~> 1.0"}
    ]
  end

有关https://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html#external-flows

的详情