dubbo注解发布服务 事务问题解决方案

问题:在使用dubbo 2.5.3之前的版本@Service来发布服务时,当该服务中有@Transactional,是无法正常发布的?
解决方案:
  • 因为事务TransactionManagement默认是使用了jdk的代理即基于接口的代理,必须改成基于类的代理,@service才会生效,所以必须修改代理方式,如果是javaconfig来配置,加上@EnableTransactionManagement(proxyTargetClass=true),如果是xml配置:

  • 进行了第一步之后,发现仍然不能发布服务,因为dubbo的@Service源码@Inherited,所以没有是不能被代理类继承的,所以还需要修改dubbo @Service的源码,在annotation上加入@Inherited,这样代理类就会继承了这个注解。(注:目前dubbo的master的分支已经修复了这个问题,但是没有发正式的版本。

  • 虽然已经发布了,但是会发现发布的服务是spring的代理SpringProxy(可以通过dubbo-admin看到,或者启动日志),不是你想要的,无法正常引用,因为必须在@Service中指定interfaceName,指定发布的服务的名称,例:@Service(version = "1.0.0",interfaceName = "com.zl.dubbotest.api.HelloService")

你可能感兴趣的:(dubbo注解发布服务 事务问题解决方案)