解決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 篇原創文章 · 獲贊 7 · 訪問量 787
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章