我们有一个带有批处理功能的Spring批处理应用程序,它可以从DB中读取记录,对其进行处理,然后调用服务/在writer中执行一些插入/更新DB中的一些表。
JDBCPagingItemReader
已被使用,因为saveState为false时它是线程安全的。
已经设置了排序键,因此线程不会相互交叉。
另外,隔离级别ISOLATION_READ_COMMITTED
已用于oracle数据源和Spring批处理的JobRepository
配置。
使用ThreadPoolTaskExecutor
的多个线程目前在单个实例中运行良好。
我们最终应该在OpenShift中部署此Spring Boot应用程序,该应用程序将在多个PODS中运行,即,该应用程序的多个实例都从同一张表读取。
有知识的人,请让我知道在多个Pod(实例)中使用上述组合是否会出现问题,或者是否有必须处理的并发问题。
在这种情况下,任何最佳实践都受到高度赞赏。
感谢您的时间。
答案 0 :(得分:0)
您可以对表进行分区,并将每个分区分配给一个容器。然后,每个分区由一个多线程作业处理。因此,这里有两个并行度:跨Pod(多个JVM)和每个Pod内(多个线程)。
有知识的人,请让我知道在多个Pod(实例)中使用上述组合是否会出现问题,或者是否有必须处理的并发问题。
如果数据集已正确分区且分区之间没有重叠,则不会存在并发问题。