@Transactional 方法在没有@Transactional 注释的情况下调用另一个方法?

新手上路,请多包涵

我在服务类中看到一个标记为 @Transactional 的方法,但它也在同一个类中调用其他一些未标记为 @Transactional 的方法。

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

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

原文由 goe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 931
1 个回答

当你在一个事务块中调用一个没有 @Transactional 的方法时,父事务将继续到新方法。它将使用来自父方法的相同连接(使用 @Transactional )并且被调用方法中引起的任何异常(不使用 @Transactional )将导致事务回滚,如事务定义中所配置的.

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

您可以在 spring 事务文档声明式事务管理 部分找到更多详细信息。

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

原文由 Arun P Johny 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题