@Dubbo与@Transactional冲突,导致服务无法发布

@Dubbo与@Transactional冲突,导致服务无法发布

  • 问题分析
  • 解决方法

问题分析

spring在处理@Transactional注释的类时,会有jdk动态代理和cglib动态代理两种方式生成代理类。jdk动态代理生成的代理类会实现与被代理类相同的接口,间接调用被代理类。cglib生成的代理类,为被代理类的子类,可以继承代理类的注解,但是dubbo的@Service注解没有@Inherited,所以代理类没有@Service注解,无法发布出去。

解决方法

1.避开在Dubbo服务里使用事务,在非Dubbo服务类里使用@Transactional,然后在Dubbo服务中调用。

2.使用dubbo2.6.0以上版本,@dubbo必须显示声明interfaceClass,配置spring.aop.proxy-target-class=true

你可能感兴趣的:(springboot,dubbo)