Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenShift中的Spring批处理JDBCPagingItemReader、ThreadPoolTaskExecutor和多个POD_Java_Oracle_Spring Boot_Openshift_Spring Batch - Fatal编程技术网

Java OpenShift中的Spring批处理JDBCPagingItemReader、ThreadPoolTaskExecutor和多个POD

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的多线程目前在单个实例中

我们有一个带有区块处理的Spring批处理应用程序,它从DB中读取记录,处理记录并调用服务/执行一些插入/更新DB中的一些表,作为writer的一部分

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中拾取重复记录时,无法更新字段的实例不会进一步进行。