您的位置:首页 > 数据库

使用SSM框架配置多个数据库连接

2017-06-13 19:58 351 查看
最近做同步数据的时候需要将数据同步到另一个数据库中,也就是跨库操作,这就需要我们配置多个数据库连接来进行操作,具体代码如下:

1、在jdbc.properties配置文件内配置两个数据库连接:

ds1.driverClassName=com.mysql.jdbc.Driver
ds1.url=jdbc:mysql://127.0.0.1:3306/img_dist-2017?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
ds1.username=123
ds1.password=123

ds2.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
ds2.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Swfy
ds2.username=123
ds2.password=123

##定义初始连接数
initialSize=0
##定义最大连接数
maxActive=20
##定义最大空闲
maxIdle=20
##定义最小空闲
minIdle=1
##定义最长等待时间
maxWait=60000


2、在application-mybatis.xml配置文件中引入数据库连接:

<!-- 引入配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>

<bean id="dataSource" class="com.siweisoft.utils.dynamicDataSource.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<!-- 指定lookupKey和与之对应的数据源 -->
<entry key="ds1" value-ref="ds1"></entry>
<entry key="ds2" value-ref="ds2"></entry>
</map>
</property>
<!-- 这里可以指定默认的数据源 -->
<property name="defaultTargetDataSource" ref="ds1" />
</bean>

<bean id="ds1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${ds1.driverClassName}" />
<property name="url" value="
be0e
${ds1.url}" />
<property name="username" value="${ds1.username}" />
<property name="password" value="${ds1.password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${initialSize}"></property>
<!-- 连接池最大数量 -->
<property name="maxActive" value="${maxActive}"></property>
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${maxIdle}"></property>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${minIdle}"></property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${maxWait}"></property>
</bean>

<bean id="ds2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${ds2.driverClassName}" />
<property name="url" value="${ds2.url}" />
<property name="username" value="${ds2.username}" />
<property name="password" value="${ds2.password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${initialSize}"></property>
<!-- 连接池最大数量 -->
<property name="maxActive" value="${maxActive}"></property>
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${maxIdle}"></property>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${minIdle}"></property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${maxWait}"></property>
</bean>


3、获取当前使用的数据源:

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

/**
* Created by Robin on 2017-06-09.
*/
public class DynamicDataSource extends AbstractRoutingDataSource {
/**
* 取得当前使用那个数据源。
*/
@Override
protected Object determineCurrentLookupKey() {
return DbContextHolder.getDbType();
}
}


4、切换数据源的工具类:

/**
* Created by Robin on 2017-06-09.
*/
public class DbContextHolder
{
private 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 str = (String) contextHolder.get();
return str;
}

/**
* 清除上下文数据
*/
public static void clearDbType()
{
contextHolder.remove();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: