JPA 存储库 Spring 引导:强制从数据库而不是缓存读取
JPA Repository Spring Boot: Force Read from DB instead of cache
我们正在使用 Spring JPARepository。我们在不同的虚拟机(不同的应用程序,不同的部署)下有不同的批处理 运行 ,并在相同的底层数据库 Table 实例上运行。
第 1 批:
第一步:插入DB.Table1;
第 2 步:耗时的复杂业务任务;
第 3 步:更新数据库中的同一行。Table1;
第 2 批:更新数据库中的同一行。Table1.
当批次 2 进程在批次 1 start/end 之间更新数据库行时,批次 1 需要从数据库中读取并采取相应行动。但它是从缓存中读取的。
Entity findById(Long id)
标记实体 @Cacheable(false)
会影响整个实体上的所有操作,这会降低性能,我不想这样做。
在特定操作级别实现相同目标的其他方法是什么?
EDIT - 在这种情况下,除了使用本机 SQL 查询强制读取 Table1 中的最新数据之外,还有什么办法吗?列 1?以下无效:
1。在 Batch 1.Step 1 期间使用 repository.saveAndFlush()
无助于读取最新数据步骤 3 repository.findById(id)
2. entityManager.refresh(entity)
无效
3. 由于每个进程在不同的上下文中是 运行,因此在 Batch 2.Step 1 上使用 LockModeType.PESSIMISTIC_FORCE_INCREMENT
无济于事
我发现本机读取是迄今为止唯一按预期工作的解决方案。
我们正在使用 Spring JPARepository。我们在不同的虚拟机(不同的应用程序,不同的部署)下有不同的批处理 运行 ,并在相同的底层数据库 Table 实例上运行。
第 1 批:
第一步:插入DB.Table1;
第 2 步:耗时的复杂业务任务;
第 3 步:更新数据库中的同一行。Table1;
第 2 批:更新数据库中的同一行。Table1.
当批次 2 进程在批次 1 start/end 之间更新数据库行时,批次 1 需要从数据库中读取并采取相应行动。但它是从缓存中读取的。
Entity findById(Long id)
标记实体 @Cacheable(false)
会影响整个实体上的所有操作,这会降低性能,我不想这样做。
在特定操作级别实现相同目标的其他方法是什么?
EDIT - 在这种情况下,除了使用本机 SQL 查询强制读取 Table1 中的最新数据之外,还有什么办法吗?列 1?以下无效:
1。在 Batch 1.Step 1 期间使用 repository.saveAndFlush()
无助于读取最新数据步骤 3 repository.findById(id)
2. entityManager.refresh(entity)
无效
3. 由于每个进程在不同的上下文中是 运行,因此在 Batch 2.Step 1 上使用 LockModeType.PESSIMISTIC_FORCE_INCREMENT
无济于事
我发现本机读取是迄今为止唯一按预期工作的解决方案。