春季批处理JDBCPagingItemReader,ThreadPoolTask​​Executor和OpenShift中的多个Pod

时间:2019-07-09 09:13:59

标签: java oracle spring-boot openshift spring-batch

我们有一个带有批处理功能的Spring批处理应用程序,它可以从DB中读取记录,对其进行处理,然后调用服务/在writer中执行一些插入/更新DB中的一些表。

JDBCPagingItemReader已被使用,因为saveState为false时它是线程安全的。 已经设置了排序键,因此线程不会相互交叉。 另外,隔离级别ISOLATION_READ_COMMITTED已用于oracle数据源和Spring批处理的JobRepository配置。

使用ThreadPoolTaskExecutor的多个线程目前在单个实例中运行良好。

我们最终应该在OpenShift中部署此Spring Boot应用程序,该应用程序将在多个PODS中运行,即,该应用程序的多个实例都从同一张表读取。

有知识的人,请让我知道在多个Pod(实例)中使用上述组合是否会出现问题,或者是否有必须处理的并发问题。

在这种情况下,任何最佳实践都受到高度赞赏。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您可以对表进行分区,并将每个分区分配给一个容器。然后,每个分区由一个多线程作业处理。因此,这里有两个并行度:跨Pod(多个JVM)和每个Pod内(多个线程)。

  

有知识的人,请让我知道在多个Pod(实例)中使用上述组合是否会出现问题,或者是否有必须处理的并发问题。

如果数据集已正确分区且分区之间没有重叠,则不会存在并发问题。