【问题标题】:Transaction propagation between services in springSpring中服务之间的事务传播
【发布时间】:2018-02-18 09:12:10
【问题描述】:

我有两个服务都是事务性的,需要传播。服务2被注入服务1。现在服务1中的方法A调用服务2的方法B。现在我正在从客户端调用方法A。我的问题是这个调用是否会

创建 1 个由方法 A 和方法 B 创建的事务将在同一个事务中运行 或者 创建 2 个事务,一个用于方法 A,另一个用于 A 调用 B。

在我的项目中,服务是事务性的,为了执行复合操作,我们在其他服务中注入了服务。

【问题讨论】:

    标签: spring spring-data spring-transactions


    【解决方案1】:

    来自REQUIREDjava-doc:

    支持当前事务,如果不存在则创建一个新事务。

    在您的情况下 - 您的变体是 1。

    注意:您可以通过为 org.springframework.orm.jpa 启用调试日志记录来控制事务的创建。

    更多信息来自official doc

    【讨论】:

    • 是的,对于 REQUIRED 属性,这种行为是正确的。但是这里两个服务都是事务性的,因此 spring 将拥有服务 A 和 B 的代理对象。现在,当服务 A 在 B 上调用方法时,它实际上是代理B 已经习惯于在 B 的 Target 调用中调用该方法。所以你不认为 Spring 会再次应用建议并为 B 打开事务。就像客户端在服务 A 上调用方法时所做的那样。
    • @PravinMourya 我不“想” - 只是阅读off. doc ))您可以通过打开调试自己检查。这是你做的吗?
    • 我会检查...我正在阅读春季书,因为当 DAO 和服务类都具有事务注释时,他们提到了这种行为(2 个事务)。我认为同样适用于服务方法。
    猜你喜欢
    • 2016-02-14
    • 2017-11-22
    • 2014-06-22
    • 2018-01-15
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2010-09-07
    • 2020-02-10
    相关资源
    最近更新 更多