Seata咨询个问题 @GlobalTransactional 直接注解到类上是不是不生效?

Seata咨询个问题 @GlobalTransactional 直接注解到类上是不是不生效?
@Service
@GlobalTransactional
public class ServerOpen03Impl implements ServerOpen03{只有注解到方法上才可以使用呢?

展开
收起
真的很搞笑 2024-01-02 19:50:23 277 分享 版权
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    是的,@GlobalTransactional注解应该直接应用在方法上,而不是类上。这个注解用于全局事务管理,它表示该方法是一个全局事务的一部分。如果将该注解应用于类级别,它将对整个类的所有方法生效,这可能导致意外的行为或错误。

    以下是一个示例,展示了如何正确地使用@GlobalTransactional注解:

    @Service
    public class ServerOpen03Impl implements ServerOpen03 {
    
        @Autowired
        private SomeDependency someDependency;
    
        @Override
        @GlobalTransactional
        public void someMethod() {
            // 业务逻辑代码
            // ...
        }
    }
    

    在上面的示例中,@GlobalTransactional注解被应用于someMethod()方法上,表示该方法是一个全局事务的一部分。这样,当调用someMethod()时,Seata将对该事务进行管理。

    2024-01-03 14:17:58
    赞同 展开评论
  • 是的,您说得对。在Seata中,@GlobalTransactional注解应该直接应用于方法上,而不是类上。当您将@GlobalTransactional注解应用于方法时,Seata会为该方法生成一个代理对象,并在调用该方法时自动处理分布式事务。

    如果您将@GlobalTransactional注解应用于类上,Seata将无法知道哪些方法是受事务管理的,因此不会为这些方法生成代理对象。这将导致@GlobalTransactional注解不生效。

    因此,为了确保@GlobalTransactional注解能够正常工作,您应该将其直接应用于方法上,而不是类上。

    2024-01-03 10:09:36
    赞同 展开评论
  • 看版本 ,此回答整理自钉群“3群-Seata 开源讨论群”

    2024-01-02 21:57:53
    赞同 展开评论