问题:在使用dubbo 2.5.3之前的版本@Service来发布服务时,当该服务中有@Transactional,服务注册不了
@Component
@Service//这个service注解是dubbo的
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public Mapper<User> getMapper() {
return userMapper;
}
}
原因:spring事务使用的时候 事务原理:https://www.cnblogs.com/williamw/p/dig-spring-transaction.html,使用了默认的cglib的方式为service生成代理,而dubbo扫描注解的时候,这个被代理的userService并没有dubbo的@service注解,可以查看一下@servece注解,dubbo定义这个注解的时候不允许子类继承父类的注解,高版本进行了修改
解决方式:
1.升级dubbo的版本
2.修改低版本的源码,但是dubbo admin中会出现springProxy而不是需要的类,可以修改,在@Service中指定interfaceName,指定发布的服务的名称,例:@Service(version = "1.0.0",interfaceName = "com.zl.dubbotest.api.HelloService")
引用:
https://www.jianshu.com/p/de5d2540748d
https://blog.csdn.net/verne_feng/article/details/53022088#
欢迎关注作者公众号交流