由于之前使用spring框架管理数据源,并通过weblogic或tomcat启动应用,在多数据源配置时,仅需注意,不同数据源配置时,通过扫描不同的接口包路径和SQL文件的文件夹路径来区分。
可是在springboot启动的环境下,同一个接口居然被两个数据源同时扫描到了,提示 required a single bean, but 2 were found。
仔细排查后确定两个数据源配置中,有且仅有一个数据源会扫描到它。
经排查,在springboot下,通过byType的方式获取数据源,而两个数据源都是Druid的DataSource,于是直接获取到两个数据源。
解决方法:在定义DataSource的bean的时候 指定其中一个 primary属性为true ,即设为主数据源。这样会先获取主数据源,主数据源没扫到对应的接口和实现时,会取另一个数据源。
<bean id="commonDataSource" name="commondb" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close" primary="true">