上下文
我支持一个相当传统的spring引导应用程序,它使用事务数据存储(oracle)。数据源配置为的示例 HikariDataSource
,事务管理器的设置由spring引导完成。
服务方法用简单的 @Transactional
注解,这意味着 Propagation.REQUIRED
. 没有 @Transactional
较低级别的注解(即dao)。
症状
我现在观察到的症状是:
通过一个重复的请求 @Transactional
方法被连续快速调用两次,参数相同。
第一次调用成功。
第二次调用由于重复而失败,并回滚其事务。
数据库中的最终结果似乎没有发生任何调用。
我怀疑这两个调用以某种方式共享了一个物理事务。
问题
文件规定: PROPAGATION_REQUIRED
强制执行物理事务,如果还不存在事务,则在本地为当前作用域执行,或者参与为更大作用域定义的现有“外部”事务。
到目前为止,我还没有弄清楚“外部”交易是什么意思。
我的问题是:
“外部”交易是否仅限于 @Transactional
方法调用另一个 @Transactional
方法?
鉴于 Propagation.REQUIRED
设置,当非嵌套 @Transactional
方法被连续两次调用,两次调用是否可能共享同一个物理事务?
暂无答案!
目前还没有任何答案,快来回答吧!