一、配置类配置数据源时:

二、 配置文件配置时
错误代码如下:
2018-12-25 20:10:01.913 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceInitializer': Invocation of init method failed; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected single matching bean but found 2: wzdxNavigationCalloutServiceDataSource,flowNavigationCalloutServiceDataSource
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at com.iflytek.mea.aisp.admin.WzdxApplicationStart.main(WzdxApplicationStart.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected single matching bean but found 2: wzdxNavigationCalloutServiceDataSource,flowNavigationCalloutServiceDataSource
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1041)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:345)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1090)
at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.init(DataSourceInitializer.java:77)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134)
... 23 common frames omitted
错误配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
<!-- *************************** group数据库配置 *************************** -->
<bean id="wzdxNavigationCalloutServiceDataSource" class="com.alibaba.druid.pool.DruidDataSource" >
<property name="driverClassName" value="${db.wzdx.driverClassName}"/>
<property name="url" value="${db.wzdx.url}"/>
<property name="username" value="${db.wzdx.username}"/>
<property name="password" value="${db.wzdx.password}"/>
<property name="initialSize" value="${db.wzdx.initialSize}"/>
<property name="maxActive" value="${db.wzdx.maxActive}"/>
<property name="connectionInitSqls" value="set names utf8mb4;"/>
<property name="filters" value="stat"/>
</bean>
<!-- define the SqlSessionFactory -->
<bean id="wzdxNavigationCalloutServiceSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="wzdxNavigationCalloutServiceDataSource"/>
<property name="mapperLocations" value="classpath:xmlMapper/wzdx/*.xml"/>
</bean>
<bean id="MoveRequest" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.iflytek.mea.aisp.admin.model.dao.wzdx.MoveRequestDao"/>
<property name="sqlSessionFactory" ref="wzdxNavigationCalloutServiceSessionFactory"/>
</bean>
<bean id="MoveRequestDealRecordsDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.iflytek.mea.aisp.admin.model.dao.wzdx.MoveRequestDealRecordsDao"/>
<property name="sqlSessionFactory" ref="wzdxNavigationCalloutServiceSessionFactory"/>
</bean>
<bean id="MoveRequestStatDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.iflytek.mea.aisp.admin.model.dao.wzdx.MoveRequestStatDao"/>
<property name="sqlSessionFactory" ref="wzdxNavigationCalloutServiceSessionFactory"/>
</bean>
<!--<bean id="dataStoreService" class="com.iflytek.mea.storage.core.ceph.DataStoreImpl" init-method="init" />-->
<!-- transaction manager, use JtaTransactionManager for global tx -->
<bean id="wzdxNavigationCalloutServiceTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="wzdxNavigationCalloutServiceDataSource"/>
<qualifier value="trans_group"/>
</bean>
<bean id="wzdxNavigationCalloutServiceTransactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<constructor-arg ref="wzdxNavigationCalloutServiceTransactionManager"/>
</bean>
<tx:annotation-driven transaction-manager="wzdxNavigationCalloutServiceTransactionManager"/>
<!--<bean id="userMapperImpl" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
<!--<property name="mapperInterface" value="com.iflytek.mea.aisp.admin.model.mapper.UserMapper" />-->
<!--<property name="sqlSessionFactory" ref="navigationCalloutServiceSessionFactory" />-->
<!--</bean>-->
<!-- transaction manager, use JtaTransactionManager for global tx -->
<bean id="flowNavigationCalloutServiceDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${db.flow.driverClassName}"/>
<property name="url" value="${db.flow.url}"/>
<property name="username" value="${db.flow.username}"/>
<property name="password" value="${db.flow.password}"/>
<property name="initialSize" value="${db.flow.initialSize}"/>
<property name="maxActive" value="${db.flow.maxActive}"/>
<property name="connectionInitSqls" value="set names utf8mb4;"/>
<property name="filters" value="stat"/>
</bean>
<bean id="flowNavigationCalloutServiceSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="flowNavigationCalloutServiceDataSource"/>
<property name="mapperLocations" value="classpath:xmlMapper/flow/*.xml"/>
</bean>
<bean id="LogUserSimpleSessionDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.iflytek.mea.aisp.admin.model.dao.flow.LogUserSimpleSessionDao"/>
<property name="sqlSessionFactory" ref="flowNavigationCalloutServiceSessionFactory"/>
</bean>
<bean id="flowNavigationCalloutServiceTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="wzdxNavigationCalloutServiceDataSource"/>
<qualifier value="trans_group"/>
</bean>
<bean id="flowNavigationCalloutServiceTransactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<constructor-arg ref="flowNavigationCalloutServiceTransactionManager"/>
</bean>
<tx:annotation-driven transaction-manager="flowNavigationCalloutServiceTransactionManager"/>
</beans>
解决方法如下:

增加primary="true"即可
primary这个翻译过来是 首要的,首选的意思。
primary的值有true和false两个可以选择。默认为false。
当一个bean的primary设置为true,然后容器中有多个与该bean相同类型的其他bean,
此时,当使用@Autowired想要注入一个这个类型的bean时,就不会因为容器中存在多个该类型的bean而出现异常。而是优先使用primary为true的bean。
版权声明:本文为Loser100原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。