【发布时间】:2019-11-18 19:25:29
【问题描述】:
我们有一个带有块处理功能的 Spring 批处理应用程序,它从数据库中读取记录、处理它们并调用服务/执行一些插入/更新数据库中的一些表作为写入器的一部分。
JDBCPagingItemReader 已被使用,因为当 saveState 为 false 时它是线程安全的。
已设置排序键,因此线程不会相互交叉。
此外,隔离级别ISOLATION_READ_COMMITTED 已用于 Oracle 数据源和 Spring 批处理的 JobRepository 配置。
使用ThreadPoolTaskExecutor 的多个线程目前在单个实例中运行良好。
我们最终应该在 OpenShift 中部署这个 Spring Boot 应用程序,该应用程序将在多个 PODS 中运行,即应用程序的多个实例都从同一个表中读取。
有知识的人可以告诉我在多个 pod(实例)中使用上述组合是否有任何问题,或者是否存在必须处理的并发问题。
高度赞赏此方案中的任何最佳实践。
感谢您的宝贵时间。
【问题讨论】:
-
如何让每个实例(多线程作业)处理表的不同部分?这将通过设计解决问题。
-
每个多线程作业已经使用 JDBCPagingItemReader 使用 sortKeys 处理不同的行集。但这一切都发生在 openshift 的 pod 内或虚拟机内。但我担心的是跨多个 pod 或多个 VM。恐怕处理不同数据集的多个实例不适用于我们的场景,但我很想知道它是如何配置的。
-
我的评论是关于多个 pod,我添加了一个包含更多详细信息的答案。
标签: java oracle spring-boot openshift spring-batch