【问题标题】:Spring Batch Parallel reading from DBSpring Batch 并行读取数据库
【发布时间】:2020-08-15 15:30:23
【问题描述】:

如何在 Spring Batch 中实现从 DB 并行读取?

根据https://docs.spring.io/spring-batch/docs/current/reference/html/scalability.html,我可以实现多线程步骤,但是,我必须为我的读者实现 SynchronizedItemStreamReader。因此,我对 DB 的所有查询都是连续的。

【问题讨论】:

  • 你想并行读取或处理什么?
  • 每个块都在新线程中执行,但读取器 doRead() 的方法是同步的。这意味着我只能在处理器和编写器中并发执行。我的目标是在非同步模式下阅读。

标签: java multithreading spring-boot concurrency spring-batch


【解决方案1】:

JdbcCursorItemReader 不是线程安全的,因为它包装了一个非线程安全的ResulSet。这就是为什么在多线程环境下你需要synchronized访问就可以了。

另一方面,JdbcPagingItemReader 是线程安全的。当使用多个线程时,每个块都在它自己的线程中执行。如果您已将页面大小配置为与提交间隔匹配,则意味着每个页面都在同一个线程中处理。

现在大多数时候我们需要缩放而不是在处理和写入时而不是在读取期间。通常,读取速度足以支持我们的可扩展性需求。 但正如我所说,如果你真的需要这个,你应该使用开箱即用的分页阅读器或编写你自己的线程安全阅读器。

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2017-11-10
    相关资源
    最近更新 更多