- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们有一个带有 block 处理的 Spring 批处理应用程序,它从数据库中读取记录,处理它们并调用服务/执行一些插入/更新数据库中的一些表作为编写器的一部分。
JDBCPagingItemReader
已被使用,因为当 saveState 为 false 时它是线程安全的。已设置排序键,因此线程不会相互交叉。此外,隔离级别 ISOLATION_READ_COMMITTED
已用于 Oracle 数据源和 Spring 批处理的 JobRepository
配置。
使用 ThreadPoolTaskExecutor
的多线程目前在单个实例中运行良好。
我们最终应该在 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、ThreadPoolTaskExecutor 和 OpenShift 中的多个 pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56949161/
我是一名优秀的程序员,十分优秀!