1.原因
因項目業務需要,要調用RPC框架,項目原本已經依賴了很多RPC接口需要啟動時加載,所以准備做成啟動時不預加載。 就是在配置的時候加上check=false.
官方文檔解釋的作用,就是Dubbo 缺省會在啟動時檢查依賴的服務是否可用,不可用時會拋出異常,阻止 Spring 初始化完成,以便上線時,能及早發現問題,默認 check="true"
。
2. 好處
首先check的配置在立即加載的環境下可以來檢查是否有服務未初始化,設置為true,如容器初始化時有未初始化的服務被注入可拋出異常讓應用初始化無法完成,設置為false則可以不影響應用的啟動,后續服務初始化完成后依然可以正常連上。也就是說check=false的配置本身可以解決循環依賴的問題。
懶加載是一種bean加載策略,並非和dubbo有直接的聯系,也並非直接為了解決服務的循環依賴而存在,這種加載方式主要作用在於節約資源,提升性能,亦可以解決循環依賴的問題,只是如有加載了dubbo服務引用的bean要應用懶加載策略,需要check設為false來防止出現未完全裝配的bean影響應用的正常運行。
3.問題
我們平時想調用RPC接口只需要在我們的dubbo配置文件中引入生產者的配置文件在POM.XML中加上依賴。
但是這種配置文件是我們直接引入不可以修改屬性,所以我們需要自己創建一個dubbo的配置文件將自己需要的接口引入進來再加上這個屬性。
當我創建好文件將項目啟動的時候,問題來了!
問題很明顯就是bean創建了兩次,從網上尋找答案,就是dubbo版本升級后重復加載Bean的時候不再是覆蓋,而是拋異常。繼而我從項目中去尋找此接口並沒有發現其他地方的引用,然后我就跟蹤查看啟動信息。
我默認掃描了spring文件夾下的所有配置文件,包括這個我新創建用來修改dubbo接口配置的文件。然后當我dubbo的文件再次加載的時候就會遇到這個問題。
原因就是:新創建的配置文件不要再放在啟動就掃描的resources默認文件夾下,新創建一個文件夾去放你所創建的文件。
4.反思
遇到問題的時候要有思路的去解決,一定要查看日志,從這些可用的條件中去排查問題。
引用-----
https://blog.csdn.net/aqi__/article/details/78727339 dubbo常用的配置
https://www.cnblogs.com/linjiqin/p/5859153.html
,