Java OpenShift中的Spring批处理JDBCPagingItemReader、ThreadPoolTaskExecutor和多个POD
我们有一个带有区块处理的Spring批处理应用程序,它从DB中读取记录,处理记录并调用服务/执行一些插入/更新DB中的一些表,作为writer的一部分Java OpenShift中的Spring批处理JDBCPagingItemReader、ThreadPoolTaskExecutor和多个POD,java,oracle,spring-boot,openshift,spring-batch,Java,Oracle,Spring Boot,Openshift,Spring Batch,我们有一个带有区块处理的Spring批处理应用程序,它从DB中读取记录,处理记录并调用服务/执行一些插入/更新DB中的一些表,作为writer的一部分 JDBCPagingItemReader已被使用,因为当saveState为false时,它是线程安全的。 已设置排序键,因此线程不会相互交叉。 此外,oracle数据源和Spring batch的配置也使用了隔离级别isolation\u READ\u COMMITTED 使用ThreadPoolTaskExecutor的多线程目前在单个实例中
JDBCPagingItemReader
已被使用,因为当saveState为false时,它是线程安全的。
已设置排序键,因此线程不会相互交叉。
此外,oracle数据源和Spring batch的配置也使用了隔离级别isolation\u READ\u COMMITTED
使用ThreadPoolTaskExecutor
的多线程目前在单个实例中运行良好
我们最终应该在OpenShift中部署这个Spring引导应用程序,该应用程序将在多个pod中运行,即应用程序的多个实例都从同一个表中读取
请有相关知识的人告诉我,在多个POD(实例)中使用上述组合是否会有任何问题,或者是否会有必须处理的并发问题
我们高度赞赏此场景中的任何最佳实践
谢谢您的时间。您可以对表进行分区,并将每个分区分配给一个pod。然后,每个分区由一个多线程作业处理。所以这里有两种并行度:跨pod(多个JVM)和在每个pod中使用(多个线程) 请有相关知识的人告诉我,在多个POD(实例)中使用上述组合是否会有任何问题,或者是否会有必须处理的并发问题
如果数据集被正确分区且分区之间没有重叠,则不会出现并发问题。让每个实例(多线程作业)处理表的不同部分怎么样?这将通过设计解决问题。每个多线程作业已经使用JDBCPagingItemReader和sortKeys处理不同的行集。但这一切都发生在openshift的吊舱内或虚拟机内。但我关心的是多个pod或多个VM。我担心处理不同数据集的多个实例不适用于我们的场景,但我很想知道如何配置它。我的评论是关于多个POD的,我添加了一个更详细的答案。感谢您的回复。我们的分区是基于月-年的,不幸的是,两个pod都必须从同一分区检索数据。我确实有一个检查,其中处理的每条记录都会更新表中的一个字段。当前,当在pod中拾取重复记录时,无法更新字段的实例不会进一步进行。