可以简单点 2023-03-07 23:55 采纳率: 80%
浏览 25

spring事务控制。

spring事务中,方法A中调用了方法b,方法A和方法B是在同一个类中,方法A加了@Transactional注解, 我怎样做才能让方法B不受方法A中的事务控制?

  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-03-08 00:10
    关注

    “Devil组”引证GPT后的撰写:

    • 如果想让方法B不受方法A中的事务控制,则可以将方法B移动到另一个类中,或者将方法B标记为不受事务控制。

    以下是一些可能的解决方案:

    将方法B移动到另一个类中
    将方法B移动到另一个类中可以确保它不会受到方法A中的事务控制。您可以在方法B所在的类上使用@Transactional(propagation = Propagation.REQUIRES_NEW)注解来确保该方法始终在自己的事务中运行。这将创建一个新的事务,使得方法B可以独立于方法A运行。
    
    将方法B标记为不受事务控制
    如果您不想将方法B移动到另一个类中,您可以使用@Transactional(propagation = Propagation.NOT_SUPPORTED)注解来标记方法B。这将使方法B在没有事务的情况下运行,即使它被调用时正处于方法A中的事务中。
    

    示例代码:

    @Service
    public class MyService {
    
        @Transactional
        public void methodA() {
            // ...
            methodB();
            // ...
        }
    
        @Transactional(propagation = Propagation.NOT_SUPPORTED)
        public void methodB() {
            // ...
        }
    }
    
    
    

    ,methodA()使用了@Transactional注解,而methodB()则使用了@Transactional(propagation = Propagation.NOT_SUPPORTED)注解,这意味着methodB()不会受到methodA()中的事务控制。

    评论

报告相同问题?

问题事件

  • 修改了问题 3月8日
  • 创建了问题 3月7日