java—在 Spring ,当事务发生得很近时,它们能合并吗?

70gysomp  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(113)

上下文

我支持一个相当传统的spring引导应用程序,它使用事务数据存储(oracle)。数据源配置为的示例 HikariDataSource ,事务管理器的设置由spring引导完成。
服务方法用简单的 @Transactional 注解,这意味着 Propagation.REQUIRED . 没有 @Transactional 较低级别的注解(即dao)。

症状

我现在观察到的症状是:
通过一个重复的请求 @Transactional 方法被连续快速调用两次,参数相同。
第一次调用成功。
第二次调用由于重复而失败,并回滚其事务。
数据库中的最终结果似乎没有发生任何调用。
我怀疑这两个调用以某种方式共享了一个物理事务。

问题

文件规定: PROPAGATION_REQUIRED 强制执行物理事务,如果还不存在事务,则在本地为当前作用域执行,或者参与为更大作用域定义的现有“外部”事务。
到目前为止,我还没有弄清楚“外部”交易是什么意思。
我的问题是:
“外部”交易是否仅限于 @Transactional 方法调用另一个 @Transactional 方法?
鉴于 Propagation.REQUIRED 设置,当非嵌套 @Transactional 方法被连续两次调用,两次调用是否可能共享同一个物理事务?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题