Spring2连接多数据库,实现读写分离

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Spring2连接多数据库,实现读写分离

Spring2.0.1以后的版本已经支持配置多数据源,并且可以在运行的时候动态加载不同的数据源。通过继承AbstractRoutingDataSource就可以实现多数据源的动态转换。目前做的项目就是需要访问2个数据源,每个数据源的表结构都是相同的,所以要求数据源的变动对于编码人员来说是透明,也就是说同样SQL语句在不同的环境下操作的数据库是不一样的。具体的流程如下:

一、建立一个获得和设置上下文的类

package com.lvye.base.dao.impl.jdbc;

/**连接哪个数据源的环境变量

* @author wenc

*/

public class JdbcContextHolder {

private static final ThreadLocal contextHolder = new ThreadLocal();

public static void setJdbcType(String jdbcType) {

contextHolder.set(jdbcType);

}

public static void setSlave(){

setJdbcType("slave");

}

public static void setMaster(){

clearJdbcType();

}

public static String getJdbcType() {

return (String) contextHolder.get();

}

public static void clearJdbcType() {

contextHolder.remove();

}

}

二、建立动态数据源类,这个类必须继承AbstractRoutingDataSource

package com.lvye.base.dao.impl.jdbc;

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

public class DynamicDataSource extends AbstractRoutingDataSource{

/* (non-Javadoc)

* @see org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#determineCurrentLook upKey()

* @author wenc

*/

@Override

protected Object determineCurrentLookupKey() {

return JdbcContextHolder.getJdbcType();

}

}

这个类实现了determineCurrentLookupKey方法,该方法返回一个Object,一般是返回字符串。该方法中直接使用了JdbcContextHolder.getJdbcType();方法获得上下文环境并直接返回。

三、编写spring的配置文件配置数据源

class="boPooledDataSource"

destroy-method="close">

com.mysql.jdbc.Driver

jdbc:mysql://192.168.18.143:3306/wenhq?useUnicode=true&characterEncoding=utf -8

root

class="boPooledDataSource"

destroy-method="close">

com.mysql.jdbc.Driver

jdbc:mysql://192.168.18.144:3306/

wenhq?useUnicode=true&characterEncoding=utf-8

root

class="org.springframework.jdbc.core.JdbcTemplate">

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

在这个配置中可以看到首先配置两个真实的数据库连接,使用的msyql数据库;master和slave是按照mysql配置的主从关系的数据库,数据会自动实时同步。mySqlDataSource会根据上下文选择不同的数据源。

在这个配置中第一个property属性配置目标数据源,中key的值必须要和JdbcContextHolder类中设置的参数值相同,如果有多个值,可以配置多个< entry>标签。第二个property属性配置默认的数据源,我们一般默认为主数据库。

相关文档
最新文档