JPA 存储库 Spring Boot:强制从数据库读取而不是缓存

Div*_*ivs 6 mysql groovy spring-data-jpa

我们正在使用 Spring JPARepository。我们在不同的虚拟机(单独的应用程序、单独的部署)下运行不同的批处理,并在同一底层数据库表实例上运行。

第1批:
第1步:插入DB.Table1;
第2步:耗时复杂的业务任务;
步骤3:更新DB.Table1中的同一行;

第 2 批:更新 DB.Table1 中的同一行。

当批次 2 进程在批次 1 的开始/结束之间更新数据库行时,批次 1 需要从数据库读取数据并采取相应的操作。但它是从缓存中读取的。 Entity findById(Long id)

标记实体@Cacheable(false)将影响整个实体上的所有操作,这会降低性能,我不想这样做。

在具体操作层面上实现相同目标的其他方法是什么?

编辑-在这种情况下,除了使用本机 SQL 查询强制读取 Table1.Col1 中的最新数据之外,还有什么方法吗?以下不起作用:
1. 在 Batch 1 期间使用repository.saveAndFlush()。Step 1 无助于读回最新数据 Step 3 repository.findById(id)
2.entityManager.refresh(entity)不起作用
3. 由于每个进程在不同的上下文下运行,因此LockModeType.PESSIMISTIC_FORCE_INCREMENT在 Batch 2 上使用。第 1 步没有帮助

Div*_*ivs 3

我发现本机阅读是迄今为止唯一按预期工作的解决方案。