【问题标题】:How does the JdbcBatchItemWriter decide the batch size?JdbcBatchItemWriter 如何决定批量大小?
【发布时间】:2019-10-23 13:52:44
【问题描述】:

我正在浏览 JdbcBatchItemWriter 的文档,但注意到无法指定 batch-size 用于此类使用的 jdbcTemplate。我认为一个名称为Batch 的类将有一些机制来指定批量大小,但看起来情况并非如此。关于批量大小的确定,我现在有以下问题:

  1. 批量大小是否等于提交间隔?
  2. 如果不是,框架是否会自动计算批大小?

最后但并非最不重要的一点是,有没有办法明确指定 jdbcTemplate@987654325 中使用的批量大小 @ 同时为JdbcBatchItemWriter 类定义bean?

【问题讨论】:

    标签: java jdbc spring-batch batch-updates itemwriter


    【解决方案1】:

    提交(或批量大小)将包括块中的所有项目,由commit-interval 管理。因此,出于所有意图和目的,您可以将 commit-interval 视为批量大小。

    对上述声明的一个警告:您的最终块可能包含的项目少于您的提交间隔。此外,如果您使用 ItemProcessor 过滤任何记录,传递给 Writer 的项目数将低于您的提交间隔。最后,还有一些自定义的CompletionPolicy 场景可能会导致提交的项目比您的提交间隔更多(或更少)。

    希望有帮助!

    【讨论】:

    • 伟大而有用的见解!我的问题只有一个方面仍未得到解答,即如何为 JdbcBatchItemWriter 提供自定义批量大小?我的处理器通过将输入文件中的一行转换为多个输出对象来返回一个列表。因此,输入文件中的一行被处理器分解为输出对象的List 并发送给编写器。我不希望该步骤的提交间隔来控制数据库插入批量大小,因为 1 个输入行等于要写入数据库的数万个输出行。这就是为什么我需要与提交间隔有一个批量大小差异。
    • 根据您的回答和我的研究,很明显JdbcBatchItemWriter 不允许自定义批量大小。我已接受您的回答并发布了新的related question。请查看并提供您的意见。
    猜你喜欢
    • 2016-02-16
    • 2018-02-21
    • 2021-03-23
    • 2018-12-01
    • 2021-02-02
    • 2020-09-21
    • 1970-01-01
    • 2012-01-30
    • 2020-11-08
    相关资源
    最近更新 更多