java - @Transactional 方法调用另一个没有@Transactional 注释的方法?

标签 java spring spring-transactions transactional

我在 Service 类中看到了一个方法,它被标记为 @Transactional,但它还在同一个类中调用了一些其他方法,这些方法没有被标记为 @Transactional

这是否意味着对单独方法的调用导致应用程序打开到 DB 的单独连接或暂停父事务等?

一个没有任何注解的方法被另一个带有@Transactional注解的方法调用的默认行为是什么?

最佳答案

当您在事务 block 中调用没有 @Transactional 的方法时,父事务将继续执行新方法。它将使用来自父方法的相同连接(使用 @Transactional),并且在被调用方法中引起的任何异常(没有 @Transactional)都会导致事务按照配置回滚在事务定义中。

如果您从具有 @Transactional 属于同一个 Spring Bean 的方法调用具有 @Transactional 注释的方法,那么被调用的方法事务的行为不会对事务产生任何影响。但是如果你从另一个有事务定义的方法调用一个有事务定义的方法,并且它们属于不同的Spring Bean,那么被调用方法中的代码会遵循自己的事务定义。

您可以在spring transaction documentation声明性事务管理部分中找到更多详细信息。 .

Spring 声明式事务模型使用 AOP 代理,因此 AOP 代理负责事务的创建。只有当被调用的方法与调用者属于不同的 Spring Bean 时,AOP 代理才会处于 Activity 状态。

关于java - @Transactional 方法调用另一个没有@Transactional 注释的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6222600/

相关文章:

eclipse - 如何运行 Spring in Action 第三版源代码

spring - 无法解析符号SpringApplication

java - 如何使用Spring事务管理将当前用户更新到数据库?

java - 如何确保多个数据库在 spring 中与单个事务管理器进行事务处理?

java - Spring MVC - 使用 java 为 Controller 创建 httprequest

java - 调整 StanfordCoreNLP 来处理嘈杂的网络文本?

java - ImageLoader 缓存并显示旧图像

java - 如何使用 keytab 在 LDAP 服务器中进行身份验证

java.lang.NoClassDefFoundError : org/apache/commons/pool/impl/GenericObjectPool 错误

java - hadoop上的自定义类FileInputFormat