如何在Spring Batch中实现从DB的并行读取?
根据https://docs.spring.io/spring-batch/docs/current/reference/html/scalability.html我可以实现multipithreaded步骤,但是,我必须为我的阅读器实现SynchronizedItemStreamReader。因此,我对DB的所有查询都是连续的
JdbcCursorItemReader
不是线程安全的,因为它包装了一个非线程安全的ResulSet
。这就是为什么在多线程环境中需要对其进行synchronized
访问
另一方面,JdbcPagingItemReader
是线程安全的。当使用多个线程时,每个块都在自己的线程中执行。如果已将页面大小配置为与提交间隔匹配,则意味着每个页面都在同一线程中处理。
现在,大多数时候,我们需要在处理和写入时进行缩放,而不是在读取时进行缩放。一般来说,读取速度足够快,可以满足我们的可扩展性需求。但正如我所说,如果你真的需要这个,你应该使用开箱即用的分页阅读器,或者编写你自己的线程安全阅读器。