【问题标题】:Spring Batch commit-interval dynamic valueSpring Batch 提交间隔动态值
【发布时间】:2019-09-26 03:26:02
【问题描述】:

我有一个Spring batch job,带有标准阅读器、编写器和处理器

我有一个简单的要求,如下所示:

1)无论阅读器读取的所有记录都应通过处理器处理传递给写入器

2) 我的读者通过 SQL 查询读取记录 因此,如果 reader 读取 100 条记录,则应立即将所有记录传递给 writer

3)如果它读取 1000 条记录,所有 1000 条应该一次通过

4)所以本质上,commit-interval 在这里是动态的而不是固定的。

5) 有什么办法可以做到这一点?

编辑:

为了更清楚,在 sprint batch 中,commit-interval 起到面向块的处理的作用 例如:如果 chunk-size = 10 ,读取器读取 10 条记录,将一条记录 1 一个 1 地传递给处理器,并且在提交间隔 (count = 10) 时,所有记录都由写入器写入。

现在我们想要的是动态提交间隔。无论读者正在阅读什么,都将立即传递给作者

【问题讨论】:

  • 你的问题不清楚。 “应该立即传递给作家”是什么意思?您能解释一下在不参考 Spring Batch 的情况下要实现的目标吗?
  • 我已经编辑了问题以更加清晰
  • 什么时候你会知道commit-interval呢?只有在执行SELECT查询时?
  • @Atul 您能否提供您的解决方案,您是如何动态设置提交间隔的?

标签: spring-batch


【解决方案1】:

可以使用 chunk-completion-policy 属性来实现。

<step id="XXXXX">
            <tasklet>
                <chunk reader="XXXReader"
                       processor="XXXProcessor"
                       writer="XXXWriter"
                       chunk-completion-policy="defaultResultCompletionPolicy">
                </chunk>
            </tasklet>
        </step>

<bean id="defaultResultCompletionPolicy" class="org.springframework.batch.repeat.policy.DefaultResultCompletionPolicy" scope="step"/>

我们还可以编写自定义块完成策略

看这篇文章

Spring Batch custom completion policy for dynamic chunk size

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2015-12-10
    • 2011-10-11
    • 2015-10-15
    • 2014-08-13
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多