有没有办法为spring批处理作业的提交间隔设置超时?

有没有办法为spring批处理作业的提交间隔设置超时?,spring,spring-batch,Spring,Spring Batch,我们有不规则的数据流,数量我无法预测。我目前将提交间隔设置为1,因为我们希望在收到数据后立即写入数据。我们有时一次会得到大量的项目(每秒约1000-50000个项目),我希望将这些项目分成更大的块,因为单独编写这些项目需要一段时间。有没有办法在提交间隔上设置超时 目标:我们将提交间隔设置为10000,我们得到9900个项目,1秒后它提交9900个项目,而不是等到它再收到100个项目 当前,当我们将提交间隔设置为大于1时,我们只看到数据等待写入,直到达到提交间隔指定的数量。您的数据流是如何传入的?

我们有不规则的数据流,数量我无法预测。我目前将提交间隔设置为1,因为我们希望在收到数据后立即写入数据。我们有时一次会得到大量的项目(每秒约1000-50000个项目),我希望将这些项目分成更大的块,因为单独编写这些项目需要一段时间。有没有办法在提交间隔上设置超时

目标:我们将提交间隔设置为10000,我们得到9900个项目,1秒后它提交9900个项目,而不是等到它再收到100个项目


当前,当我们将提交间隔设置为大于1时,我们只看到数据等待写入,直到达到提交间隔指定的数量。

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

无论采用哪种方式,我通常都会利用流控制来实现作业循环,并只处理给定时间间隔内准备处理的记录数:

<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"/>

看一看,我对你的用例的第一个想法是关于和坚持以后。目前,我们每分钟收到几个焦油球(file1.tar.gz),每个焦油球包含100s-1000个项目。焦油球中的每个项目都会启动一个新作业。tar-ball中的一些文件是不必要的,并且没有提交到数据库,但是在打开它们之前,我们无法判断是哪个文件。还有一些情况下,我们几个小时都没有收到新文件,那么这里的“processStep”步骤将是一个分区步骤,用于拾取刚刚到达的每个文件。或者,您可以在此之前添加一个小的tasklet步骤,在分区步骤之前打开焦油球。无论哪种方式,决策器都可以很好地在您的文件夹中达到峰值,以查看是否有任何文件正在等待处理。
if (maxTimeReached) {
    return END;
}

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