解决Dubbo无法发布被事务代理的Service问题

原因

我们如果在服务提供者类上加入@Transactional事务控制注解后,服务就发布不成功了。原因是事务控制的底层原理是为服务提供者类创建代理对象,而默认情况下Spring是基于JDK动态代理方式创建代理对象,而此代理对象的完整类名为com.sun.proxy.$Proxy42(最后两位数字不是固定的),导致Dubbo在发布服务前进行包匹配时无法完成匹配,进而没有进行服务的发布。

问题展示

在这里插入图片描述

上面的错误为没有可用的服务提供者

查看dubbo管理控制台发现服务并没有发布
在这里插入图片描述

解决方案

(1)修改applicationContext-service.xml配置文件,开启事务控制注解支持时指定proxy-target-class属性,值为true。其作用是使用cglib代理方式为Service类创建代理对象

 <!--开启事务控制的注解支持-->
 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

(2)修改HelloServiceImpl类,在Service注解中加入interfaceClass属性,值为HelloService.class,作用是指定服务的接口类型

@Service(interfaceClass = HelloService.class)//加上所实现的接口类型
@Transactional
public class HelloServiceImpl implements HelloService {
    public String sayHello(String name) {
        return "hello " + name;
    }
}
发布了13 篇原创文章 · 获赞 5 · 访问量 235

猜你喜欢

转载自blog.csdn.net/qq_38559956/article/details/103103180
今日推荐