首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Transactional(传播= Propagation.REQUIRED)在春季?

@Transactional(传播= Propagation.REQUIRED)在春季?
EN

Stack Overflow用户
提问于 2018-02-26 08:39:16
回答 3查看 2.4K关注 0票数 0

如果我有以下代码:

代码语言:javascript
复制
@Component
public class A{ 

@Transactional(propagation = Propagation.REQUIRED)
public void a(){
    //logic
    b();
 //logic
}

@Transactional(propagation = Propagation.REQUIRED)
public void b(){
    //logic
} 
}

在这个代码示例中,有多少事务打开了Spring?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-26 08:49:21

无所谓。当从b()调用a()时,它不会通过代理,因此不会考虑b()上的任何事务属性。

如果通过代理(即类之外)调用a()b(),则示例代码将打开1个事务,并且已经没有正在进行的事务。

票数 3
EN

Stack Overflow用户

发布于 2018-02-26 08:51:13

我在@pablo中添加了以下注意事项:在您的示例中,您无法看到实际的区别,因为您在同一个对象中调用了您的方法,这使得第二个方法上的@事务行为透明而没有效果:

在代理模式(这是默认的)中,只截获通过代理传入的外部方法调用。这意味着自调用,实际上,在目标对象中调用目标对象的另一个方法的方法,即使被调用的方法标记为@ transaction,在运行时也不会导致实际事务。

票数 3
EN

Stack Overflow用户

发布于 2018-02-26 08:49:52

引用文档 Propagation.REQUIRED支持当前事务,如果不存在,则创建一个新事务。你的问题的答案是:

1事务,如果在调用A#a()时没有事务。

0- 0,如果已经有一个,因为它将被重用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48984379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档