我们正在使用Spring JPARepository。我们在不同的虚拟机(单独的应用程序,单独的部署)下运行并在同一个底层数据库表实例上运行的不同批处理过程。
批次1:
第1步:插入DB.Table1;
第2步:耗时的复杂商务任务;
第3步:更新DB.Table1中的同一行;
批处理2:在DB.Table1中更新相同的行。
当Batch 1进程在批处理1的开始/结束之间更新时,批处理1需要从DB读取并相应地执行操作。但它反而是从缓存中读取。
Entity findById(Long id)
标记实体@Cacheable(false)
将影响整个此实体的所有操作,这将降低性能并且我不想这样做。
在特定的操作级别实现相同的另一种方法是什么?
编辑 - 在这种情况下,除了使用Native SQL查询强制读取Table1.Col1中的LATEST数据之外,还有什么方法吗?以下没有工作:1。在批处理期间使用repository.saveAndFlush()
1.步骤1无助于回读最新数据步骤3 repository.findById(id)
2. entityManager.refresh(entity)
没有工作
3.由于每个流程都在不同的环境下运行,因此在批处理2上使用LockModeType.PESSIMISTIC_FORCE_INCREMENT
。步骤1不会帮助
答案 0 :(得分:1)
我发现本地读取是迄今为止唯一能够按预期工作的解决方案。