多個@bean無法通過@resource注入對應的bean(org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected single matching bean but found )


一、異常

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected single matching bean but found 2: masterDataSource,slaveDataSource

二、場景分析

看異常提示這個類型”javax.sql.DataSource“的bean期待一個單例bean但是發現了2個:masterDataSource,slaveDataSource。看打印的堆棧:

 如上,我們發現有個DataSourceInitializer.init方法追蹤進去:

這里就給了我們一個靈感,DataSourceInitializer這個數據源初始化是spring boot自動配置類啟動的。如下圖

繼續追蹤異常:最終定位在DefaultListableBeanFactory.resolveNamedBean()中如下代碼塊:

如上圖第一,第二個箭頭分別取@Primary和@Priority2種注解注釋的bean,只要存在,就可以獲取bean並返回。

三、解決方案

1. 在其中一個bean上加@Primary,使得自動配置時不報錯。

1 @ConfigurationProperties(prefix = "study.datasource.master")
2 @Bean(name = "masterDataSource")
3 @Primary
4 public DataSource masterDataSource() {
5 }

 

2. 在啟動類注解:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 Caused by:org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type "" available: expected at least 1 bean which qualifies as autowire candidate 在springboot啟動報錯:No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 解決hibernate項目添加集成jpa使用EntityManager時報錯No qualifying bean of type 'javax.persistence.EntityManagerFactory' available: expected single matching bean but found 2: sessionFactory,entityManagerFactory Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.thinkplatform.dao.UserLogDao' available: expected at least 1 bean which qualifies as autowi springboot啟動報錯:Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.zxkj.lockserver.dao.CompanyDao' available: expected at least 1 bean which qua org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'cn.yang.service.StudentInterface' available: expected at least 1 bean which qualifies as autowire candidate org.springframework.beans.factory.NoSuchBeanDefinitionException:No qualifying bean of type 'xxx 'available MyBatis Plus:No qualifying bean of type 'com.baomidou.mybatisplus.mapper.BaseMapper ' available: expected single matching bean but found 4 required a bean of type 'javax.sql.DataSource' that could not be found. springmvc注入類 NoUniqueBeanDefinitionException: No qualifying bean of type [] is defined: expected single錯誤
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM