java - Spring batch JDBCPagingItemReader、ThreadPoolTask​​Executor 和 OpenShift 中的多个 pod

标签 java oracle spring-boot openshift spring-batch

我们有一个带有 block 处理的 Spring 批处理应用程序,它从数据库中读取记录,处理它们并调用服务/执行一些插入/更新数据库中的一些表作为编写器的一部分。

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

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

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

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

非常感谢在此场景中的任何最佳实践。

感谢您的宝贵时间。

最佳答案

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

Could someone who has the knowledge, let me know if there would be any problem using the above combination in multiple pods ( instances ) or if there would be concurrency issues which have to be dealt with .

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

关于java - Spring batch JDBCPagingItemReader、ThreadPoolTask​​Executor 和 OpenShift 中的多个 pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56949161/

相关文章:

mysql - unknown.binary :mysql-connector-java-5. 1.23-bin :jar:SNAPSHOT is missing, 的 POM 没有可用的依赖信息

java - 频繁关闭和打开 hibernate session 是个好主意吗?

Java - 数学函数的派生泛型类

sql - 关于 oracle 11g 问题的索引

java - 带有 Spring Boot 2 错误的 Kotlin JPA 插件

java - 如何使用 spring jpa 将三个实体连接到一张表中?

java - 没有找到类定义

java - struts2中需要的简单OGNL投影

c# - 发布到 Microsoft Azure 时无法加载 OraOps12.dll

oracle - SQL*Plus 用户输入异常处理