1. 程式人生 > >DUBBO配置引發的一個問題--- DUPLICATE SPRING BEAN ID

DUBBO配置引發的一個問題--- DUPLICATE SPRING BEAN ID

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.反思

    遇到問題的時候要有思路的去解決,一定要檢視日誌,從這些可用的條件中去排查問題。

引用-----  

相關推薦

DUBBO配置引發一個問題--- DUPLICATE SPRING BEAN ID

1.原因    因專案業務需要,要呼叫RPC框架,專案原本已經依賴了很多RPC介面需要啟動時載入,所以準備做成啟動時不預載入。 就是在配置的時候加上check=false.   官方文件解釋的作用,就是Dubbo 預設會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止

Duplicate spring bean id BarterUserService

1.如果是在同一個專案下搞的測試,bean名就不要重複了,可能會出現這個錯誤 2.spring id 重複吧,或者載入了2個相同的配置檔案,可能會出現這個錯誤 3.web.xml中載入的時候

spring bean id重複覆蓋的問題解決

問題:    當我們的web應用做成一個大專案之後,裡面有很多的bean配置,如果兩個bean的配置id是一樣的而且實現類也是一樣的,例如有下面兩份xml的配置文件: beancontext1.xml <?xml version="1.0" encoding="UTF

Spring bean id 重複覆蓋的問題解決

問題提問:  當我們的web應用龐大之後,裡面有很多的bean配置並且是分檔案的,如果兩個bean的配置id是一樣的而且實現類也是一樣的,例如有下面兩份xml的配置文件。 問題分析: beancontext1.xml <?xml version="1.0"

使用監聽器對Spring bean id進行唯一校驗

       因為Spring IOC容器啟動載入時會檢查bean定義是否有重複,如果有重複則會根據AbstractRefreshableApplicationContext類中的allowBeanDefinitionOverriding屬性值進行判斷,如果值為true,則把

spring 配置bean idbean name 的區別

簡單的說:id用來標識bean,是唯一的,且只有一個;name定義的是bean的alias,可以有多個,並可能與其他的bean重名。 詳細的說: id是唯一標識bean.不能用特殊字元:×#@ ,不能用數字開頭。在bean引用的時候只能用id指向你需要的bean;

解決spring中不同配置檔案中存在name或者id相同的bean可能引起的問題

spring對同一配置檔案中相同id或者name的兩個或以上的bean時,做直接拋異常的處理,而對不同配置檔案中相同id或者名稱的bean,只會在列印日誌級別為info的資訊,資訊內容大概為"Overriding bean definition for bean xxx :

Spring MVC + zookeeper + Dubbo 配置

ctu ble 暴露 解決 operator war cursors hid zookeep 1、首先下載zookeeper註冊中心,下載地址:http://www.apache.org/dyn/closer.cgi/zookeeper/ 2、在conf目錄下,有一個zo

Spring Configuration動態繫結bean id

簡述: 對於bean id 可能在注入的時候需要根據配置動態的制定例項 程式碼: ERepositoryConfigure.java package com.cpa.components.system.e.repository; import org.apache.com

記錄Spring Boot大坑一個,在bean中如果有@Test單元測試,不會註入成功

記錄 one except frame oot beans org init def 記錄Spring Boot大坑一個,在bean中如果有@Test單元測試,不會註入成功 記錄Spring Boot大坑一個,在bean中如果有@Test單元測試,不會註入成功 記錄Sp

記錄Spring Boot大坑一個,在bean中如果有@Test單元測試,不會注入成功

記錄Spring Boot大坑一個,在bean中如果有@Test單元測試,不會注入成功 記錄Spring Boot大坑一個,在bean中如果有@Test單元測試,不會注入成功 記錄Spring Boot大坑一個,在bean中如果有@Test單元測試,不會注入成功 org.springframework.

spring bean配置----applicationContext.xml

spring 配置檔案的根元素是<beans> ,<beans>中包含了多個<bean>子元素,每個<bean>元素定義一個Bean,並描述Bean如何被裝配到spring容器中。 bean元素常用屬性及其子元素如下

在ServletContextListener 的實現類中(使用Spring @Value 註解的方式讀取配置檔案、或者注入Spring bean

在ServletContextListener 的實現類中 使用Spring @Value 註解的方式讀取配置檔案 我想向ServletContextListener中通過Spring @value 的方法讀取 properties 配置檔案資訊,但是我開始的方法不行 public class MyLi

Spring Bean 配置細節

引用其它 Bean •組成應用程式的 Bean 經常需要相互協作以完成應用程式的功能. 要使 Bean 能夠相互訪問, 就必須在 Bean 配置檔案中指定對 Bean 的引用 •在 Bean 的配置檔案中, 可以通過 <ref> 元素或 ref  屬性為 Bean 的屬

Spring Bean配置使用外部屬性檔案(十二)

一、為什麼要在配置bean時使用外部屬性檔案?    對於一般通用的配置,例如,連線資料庫配置資訊,會寫到properties檔案中,然後在XML配置檔案中呼叫相關的引數值。因而,我們需要將be

spring Boot環境下dubbo+zookeeper的一個基礎講解與示例

一、  Dubbo 概述 1.    為什麼需要Dubbo         網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,Dubbo是一個分散式服務框架,在這種情況下誕生的。現在核心業務抽取出來,作為獨立的服務,

通過Spring Bean 注入static變數,來設計一套適合測試,開發,生產環境的配置

(http://blog.csdn.net/initphp/article/details/8834844) 這邊文章的目的主要是為了在spring開發web專案的時候,讓我們的測試,開發,生產環境的配置項 .properties作為配置檔案。 我們首先需要建

spring bean 配置

1.屬性注入 class: package com.cmr.spring; public class HelloWorld {private String name;public void setName(String name) {System.out.println("設定name");

springBean配置

Spring是一個開源的框架,其目標是簡化java的開發。為了降低Java開發的複雜性,Spring有如下的特性: >> 基於POJO的輕量級和最小侵入性程式設計 >> 通過依

如何在spring配置集合供多個Bean使用

一:Utility   Scheme 1.使用基本的集合標籤定義集合時,不能將集合作為獨立的Bean定義,導致其他Bean無法引用該集合,所以無法在不同Bean之間 共享集合。 2.可以使用Utility  Scheme裡的集合標籤定義獨立的集合Bean,需要的是在B