SSM框架连接两个数据库

本文介绍如何在SSM(Spring、SpringMVC、MyBatis)框架下实现应用程序连接并切换两个不同的数据库。通过配置工具类和调整`applicationContext.xml`,在业务(biz)层灵活选择所需的数据源进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工具类:

/**
 * 
 */
package com.myhope.util;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
 * Description:<br/>
 * Copyright (c) , 2017, Jansonxu <br/>
 * This program is protected by copyright laws. <br/>
 * Program Name:DynamicDataSource<br/>
 * Date:2019年2月13日
 * 
 * @author 
 * @version : 1.0
 */
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();
    }

}

applicationContext.xml配置文件


	<!-- 连接池:C3P0, DBCP等等 -->
	<!-- 配置第一个数据库-->	
	<bean id="dataSource_first" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}" />
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="user" value="${jdbc.user}" />
		<property name="password" value="${jdbc.password}"></property>
		<property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
		<property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
		<property name="minPoolSize" value="${jdbc.minPoolSize}" />
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
	</bean>
	
	<!-- 配置第二个数据库-->	
	<bean id="dateSource_second" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="jdbcUrl" value="${jdbc.jdbcUrl2}" />
		<property name="driverClass" value="${jdbc.driverClass2}"></property>
		<property name="user" value="${jdbc.user2}" />
		<property name="password" value="${jdbc.password2}"></property>
		<property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
		<property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
		<property name="minPoolSize" value="${jdbc.minPoolSize}" />
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
	</bean>
	
	<bean id="dataSource" class="com.myhope.util.DbcontextHolder">
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <!-- 指定lookupKey和与之对应的数据源,这里的key可以自行定义,要切换数据库的时候以key为标识,不要写错 -->
                <entry key="dataSource_first" value-ref="dataSource_first"></entry>
                <entry key="dateSource_second" value-ref="dateSource_second"></entry>
            </map>
        </property>
        <!-- 这里可以指定默认的数据源 -->
        <property name="defaultTargetDataSource" ref="dataSource_first" />
    </bean>

biz层切换数据库

	DbcontextHolder.setDbType("dataSource_first");
	DbcontextHolder.setDbType("dateSource_second");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值