首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring和Mybatis多数据源设置

Spring和Mybatis多数据源设置
EN

Stack Overflow用户
提问于 2011-01-20 19:51:33
回答 3查看 21.9K关注 0票数 4

我的应用程序使用Spring3+MyBatis3。我正在尝试为它设置多个数据源。设置如下所示:

代码语言:javascript
运行
复制
<!-- db1 setup-->
<bean id="db1SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
    p:configLocation="WEB-INF/mybatis/sqlMapConfig.xml"
    p:dataSource-ref="db1DataSource" />
<bean id="db1SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg ref="db1SqlSessionFactory"/>
</bean>
<!-- db2 setup -->
<bean id="db2SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
    p:configLocation="WEB-INF/mybatis/sqlMapConfig.xml"
    p:dataSource-ref="db2DataSource" />
<bean id="db2SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg ref="db2SqlSessionFactory"/>
</bean>

在日志中,我发现了这条消息:

代码语言:javascript
运行
复制
No unique bean of type [org.apache.ibatis.session.SqlSessionFactory] is defined: expected single matching bean but found 2: [db1SqlSessionFactory, db2SqlSessionFactory]

我用谷歌搜索并查看了mybatis手册,但找不到如何使用mybatis设置多个数据源的方法。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-20 21:08:04

解决了,问题是我必须直接指定对sqlSessionFactory的引用

代码语言:javascript
运行
复制
<bean id="myDao" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:sqlSessionTemplate-ref="db1SqlSessionTemplate"
    p:mapperInterface="my.project.domain.dao.MyDao"
    p:sqlSessionFactory-ref="db1SqlSessionFactory"/>
票数 2
EN

Stack Overflow用户

发布于 2014-12-11 22:17:09

也解决了!只需在MapperScannerConfigurer中引用您的工厂bean : sqlSessionFactoryBeanName

第一个数据源>>>>>>>

代码语言:javascript
运行
复制
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource1"/>
</bean>

<bean id="MapperScannerConfigurer1" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.package.p1"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory1"/>
    </bean>

第二个数据源>>>>>>

代码语言:javascript
运行
复制
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource2"/>
    </bean>
<bean id="MapperScannerConfigurer1" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.package.p2"/>
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory2"/>
</bean>
票数 4
EN

Stack Overflow用户

发布于 2015-05-13 10:57:16

在DAO实现中,使用SqlSessionTemplate而不是SqlSessionDaoSupport。注入bean db1SqlSessionTemplatedb2SqlSessionTemplate

代码语言:javascript
运行
复制
@Repository
public class TestDaoImpl implements TestDao{
    @Autowired
    private SqlSession db1SqlSessionTemplate;
    ...
    db1SqlSessionTemplate.selectList("testSelect");
    ...
}

在扩展SqlSessionDaoSupport时,context Spring并不知道您使用了SqlSession

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4746766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档