我在服务类中看到一个标记为 @Transactional
的方法,但它也在同一个类中调用其他一些未标记为 @Transactional
的方法。
这是否意味着对单独方法的调用导致应用程序打开与数据库的单独连接或暂停父事务等?
没有任何注释的方法被另一个带有 @Transactional
注释的方法调用的默认行为是什么?
原文由 goe 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在服务类中看到一个标记为 @Transactional
的方法,但它也在同一个类中调用其他一些未标记为 @Transactional
的方法。
这是否意味着对单独方法的调用导致应用程序打开与数据库的单独连接或暂停父事务等?
没有任何注释的方法被另一个带有 @Transactional
注释的方法调用的默认行为是什么?
原文由 goe 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
当你在一个事务块中调用一个没有
@Transactional
的方法时,父事务将继续到新方法。它将使用来自父方法的相同连接(使用@Transactional
)并且被调用方法中引起的任何异常(不使用@Transactional
)将导致事务回滚,如事务定义中所配置的.如果您调用一个带有
@Transactional
注释的方法,该方法带有@Transactional
属于同一个 SpringBean
方法,那么被调用的方法将不会产生任何影响行为,在交易上。但是如果你从另一个带有事务定义的方法调用一个带有事务定义的方法,并且它们属于不同的 SpringBean
s,那么被调用方法中的代码将遵循它自己的事务定义。您可以在 spring 事务文档 的 声明式事务管理 部分找到更多详细信息。
Spring 声明式事务模型使用 AOP 代理,因此 AOP 代理负责创建事务。仅当被调用方法属于与调用方不同的 Spring
Bean
时,AOP 代理才会处于活动状态。