有没有办法在spring批处理作业上设置commit-interval的超时?

时间:2016-06-09 03:26:27

标签: spring spring-batch

我们有不定期的数据流和数量,我无法预测。我目前将commit-interval设置为1,因为我们希望在收到数据后立即写入数据。我们有时会一次获得大量的项目(一秒钟内大约1000-50000个项目),我想用更大的块来提交,因为单独编写这些项目需要一段时间。有没有办法在commit-interval上设置超时?

目标:我们将commit-interval设置为10000,我们获得9900个项目,1秒后它会提交9900个项目,而不是等到它再收到100个项目。

目前,当我们将commit-interval设置为大于1时,我们只看到等待写入的数据,直到达到commit-interval指定的数量。

1 个答案:

答案 0 :(得分:0)

您的数据如何流入?是否被加载到工作台?添加到队列?通常,您只需将工作表或队列排干,然后执行最佳的提交间隔,然后定期重新运行作业以检查是否已收到新的一批入站记录。

无论哪种方式,我通常会利用流量控制来使您的作业循环,并且只处理准备好在给定时间间隔内处理的记录:

<job id="job">
    <decision id="decision" decider="decider">
        <next on="PROCESS" to="processStep" />
        <next on="DECIDE" to="decision" />
        <end on="COMPLETED" />
        <fail on="*" />
    </decision>

    <step id="processStep">
        <!-- your step here -->
    </step>

</job>

<beans:bean id="decider" class="com.package.MyDecider"/>

然后你的决策者会做这样的事情:

if (maxTimeReached) {
    return END;
}

if (hasRecords) {
    return PROCESS;
} else {
    wait X seconds;
    return DECIDE;
}