mybatis 连接多个库(Spring MVC)

1.修改数据库配置database.properties文件

复制代码
jdbc.url=jdbc:mysql://localhost:3306/hippo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=root
jdbc.driver=com.mysql.jdbc.Driver


a.jdbc.url=jdbc:mysql://localhost:3306/hippo_auth?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
a.jdbc.username=root
a.jdbc.password=root
a.jdbc.driver=com.mysql.jdbc.Driver
复制代码

2. 修改mybatis配置 applicationContext.xml文件

复制代码
<bean id="aDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${a.jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="10"/>
        <property name="maxIdle" value="5"/>
    </bean>

  <bean id="bDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="10"/>
        <property name="maxIdle" value="5"/>
    </bean>
     <!-- 动态数据源,**.**.**.DatabaseContextHolder 屏蔽了包名,为具体选择数据库的类 -->
    <bean id="dynamicDataSource" class="**.**.**.DatabaseContextHolder">
        <property name="defaultTargetDataSource" ref="aDataSource"/>
        <property name="targetDataSources">
            <map>
                <entry key="aDataSource" value-ref="aDataSource"/>
                <entry key="bDataSource" value-ref="bDataSource"/>
            </map>
        </property>
    </bean>
  <!--重点sqlSessionFactory的数据源配置项填写为动态数据源-->   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">   <property name="dataSource" ref="dynamicDataSource"/>   <property name="typeAliasesPackage" value="com.mininglamp.hippo.db.model"/>    <property name="configLocation" value="classpath:mybatis-mapper-config.xml"/>    <property name="mapperLocations" value="classpath*:mapper/*.xml" />   </bean>
复制代码

3.创建类DbcontextHolder

复制代码
public class DbcontextHolder extends AbstractRoutingDataSource {

    public static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

    /**
     * 设置当前数据源
     * @param dbType
     */
    public static void setDbType(String dbType){
        contextHolder.set(dbType);
    }
    /**
     * 获得当前数据源
     * @return
     */
    public static String getDbType(){
        String dbType = (String)contextHolder.get();
        return dbType;
    }
    /**
     *清除上下文
     *
     */
    public void clearContext(){
        contextHolder.remove();
    }
    @Override
    protected Object determineCurrentLookupKey() {
        return DbcontextHolder.getDbType();
    }
}
复制代码

4.在方法中连接不同数据库

//连接bDataSource进行查询
DbcontextHolder.setDbType("bDataSource");
Template template = templateMapperExtend.selectByPrimaryKey(templateId);
//连接aDataSource进行插入
DbcontextHolder.setDbType("aDataSource");
siteAsyncMapper.insertSelective(siteAsync);

5.参考

https://blog.csdn.net/u010716879/article/details/78459529

posted @   -小月半子-  阅读(415)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示