ssm框架,配置多数据源,初始化后只注入了一个数据源,求大神把脉!

二哥学Java 发布于 2016/11/07 22:33
阅读 1K+
收藏 1

数据源--dataAccessContext.xml
<!-- 数据源定义,使用Apache DBCP 连接池 -->
<bean id="dataSource" name="default_ds"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.cloudmaster.driverClassName}" />
<property name="url" value="${jdbc.cloudmaster.url}" />
<property name="username" value="${jdbc.cloudmaster.username}" />
<property name="password" value="${jdbc.cloudmaster.password}" />
<property name="initialSize" value="${jdbc.cloudmaster.initialSize}" />
<property name="maxActive" value="${jdbc.cloudmaster.maxActive}" />
<property name="maxIdle" value="${jdbc.cloudmaster.maxIdle}" />
<property name="minIdle" value="${jdbc.cloudmaster.minIdle}" />
<property name="validationQuery" value="${jdbc.cloudmaster.validationQuery}" />
</bean>
<!-- monitoropenStack数据源定义,使用Apache DBCP 连接池-->
<bean id="monitoropenStackDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.openstack.driverClassName}"/>
<property name="url" value="${jdbc.openstack.url}" />
<property name="username" value="${jdbc.openstack.username}" />
<property name="password" value="${jdbc.openstack.password}" />
<property name="initialSize" value="${jdbc.openstack.initialSize}"/>
<property name="maxActive" value="${jdbc.openstack.maxActive}"/>
<property name="maxIdle" value="${jdbc.openstack.maxIdle}"/>
<property name="minIdle" value="${jdbc.openstack.minIdle}"/>
<property name="validationQuery" value="${jdbc.openstack.validationQuery}"/>
<property name="testWhileIdle" value="${jdbc.openstack.testWhileIdle}"/> 
<property name="timeBetweenEvictionRunsMillis" value="${jdbc.openstack.timeBetweenEvictionRunsMillis}"/> 
</bean>

mybatis.xml

<!-- cloudmaster数据源 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
</bean>
<bean id="mybatisDao" class="com.chinamobile.bcop.dao.impl.MybatisDAOImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<!-- monitoropenStack数据源 -->
<bean id="sqlSessionFactory_monitoropenStack" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="monitoropenStackDataSource" />
<property name="configLocation" value="classpath:mybatis/mybatis-config-monitor.xml"></property>
</bean>
<bean id="monitorMybatisDao" class="com.chinamobile.bcop.dao.impl.MybatisDAOImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory_monitoropenStack"></property>
</bean>

service层注入
    @Autowired
    @Qualifier("mybatisDao")
    private IMybatisDAO mybatisDao;
    @Autowired
    @Qualifier("monitorMybatisDao")
    private IMybatisDAO monitorMybatisDao;

在请求数据库做插入的时候monitorMybatisDao这个类的数据源和mybatisDao是同一个,求大神们给指导,哪里出现了问题?

后面在service层断点进去发现,



在service层去掉第一个dao注入后,断点发现monitorMybatisDao的数据源仍然不对,大神们这是什么问题呢?

加载中
0
二哥学Java

引用来自“Alexdevlin”的评论

两个dao对应改成两个实现类试试

问题解决啦,mybatis.xml配置里面之前用的时候加了一个
<bean id="sqlSessionTemplate"class="org.mybatis.spring.SqlSessionTemplate" ><constructor-arg index="0"ref="sqlSessionFactory_cloudmaster" /></bean>
这个,每次初始化的时候第一个数据源被默认注入到dao了。这个配置被我注释掉就好啦,关于这个配置我理解的不是很透彻,有兴趣的可以学习一下,和大家共享讨论。谢谢大家!
Alexdevlin
Alexdevlin
66666
0
Alexdevlin
Alexdevlin

两个dao对应改成两个实现类试试

二哥学Java
回复 @Alexdevlin : 好吧,谢谢你!
Alexdevlin
Alexdevlin
回复 @二哥学Java : 那就不知道了,等你解决了分享一下哈
二哥学Java
回复 @Alexdevlin : 我换掉dao的实现类后依旧没有得到想要的数据源
Alexdevlin
Alexdevlin
回复 @二哥学Java : 我司也是多个数据源不同实现类,没遇到你这个问题。。。
二哥学Java
回复 @Alexdevlin : 你说的对的,但是问题貌似不是出现在这个实现类上
下一页
返回顶部
顶部