你好,游客 登录 注册 搜索
背景:
阅读新闻

Spring+MyBatis多数据源切换

[日期:2015-10-23] 来源:Linux社区  作者:chenkaideng [字体: ]

在实际的公司项目中,很可能会遇到一个问题就是,一个Java项目,但是项目中涉及两个数据库,这两个数据库还在不同IP的机子上。

遇到这种情况的时候,我们有两个选择

1、不走spring的aop方式,直接去多做两个dataSource

2、用spring进行管理,灵活地进行数据源切换

现在就来对第2种方式进行笔记:

spring.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
 http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "> 
 
      <!--配置mysql数据库参数 -->
    <context:property-placeholder location="mysql.properties" />
   
    <!--多个数据源配置  -->
    <bean id="db1" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <!-- 连接数据库参数 -->
        <property name="driverClassName" value="${db1.driver}" />
        <property name="url" value="${db1.url}" />
        <property name="username" value="${db1.username}" />
        <property name="password" value="${db1.password}" />
   
      <!--连接池参数 -->
<property name="initialSize" value="10" />
<property name="maxActive" value="500" />
<property name="maxIdle" value="40" />
<property name="minIdle" value="10" />
    </bean>
   
    <bean id="db2" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <!-- 连接数据库参数 -->
        <property name="driverClassName" value="${db2.driver}" />
        <property name="url" value="${db2.url}" />
        <property name="username" value="${db2.username}" />
        <property name="password" value="${db2.password}" />
   
      <!--连接池参数 -->
<property name="initialSize" value="10" />
<property name="maxActive" value="500" />
<property name="maxIdle" value="40" />
<property name="minIdle" value="10" />
    </bean>
   
    <bean id="dataSource" class="com.ckd.datasource.mybatis.DynamicDataSource">
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <entry key="db1" value-ref="db1" />
                <entry key="db2" value-ref="db2" />
            </map>
        </property>
        <property name="defaultTargetDataSource" ref="db2" />
    </bean>
   
    <!-- mybatis配置 -->
      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/>
</bean>
<!--获取sqlSession-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0">
        <ref bean="sqlSessionFactory"/>
        </constructor-arg>
</bean>
<!-- 事务管理器配置,单数据源事务 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
   
</beans>

------------------------------------------------------------------

/**
 * @fileName DataSourceContextHolder.java
 * @author chenkaideng
 * @date 2015年8月27日
 * @describe 数据源设值Holder类
 */
public class DataSourceContextHolder {
 
  private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); 
 
  public static void setDbType(String dbType) { 
  contextHolder.set(dbType); 
  } 
 
  public static String getDbType() { 
  return ((String) contextHolder.get()); 
  } 
 
  public static void clearDbType() { 
  contextHolder.remove(); 
  } 
}

弄完以上的事情,剩下的事情就简单了

-》先是加载spring.xml文件applicationContext = new ClassPathXmlApplicationContext("spring.xml");

-》然后设置数据源DataSourceContextHolder.setDbType("db1");

-》接着从applicationContext 中获取sqlSession = (SqlSession) applicationContext.getBean("sqlSession");

-》最后就可以拿这个sqlSession去做增删改查的操作

注意:不用对这个sqlSession做close和comit的操作,因为都已经由spring自己管理了,不用手动做这些操作。

MyBatis入门学习教程  http://www.linuxidc.com/Linux/2015-02/113771.htm

Java实战应用:Mybatis实现单表的增删改 http://www.linuxidc.com/Linux/2014-06/103456.htm

[Java][Mybatis]物理分页实现 http://www.linuxidc.com/Linux/2014-04/99889.htm

Mybatis快速入门教程 http://www.linuxidc.com/Linux/2013-06/85762.htm

Mybatis的关于批量数据操作的测试 http://www.linuxidc.com/Linux/2012-05/60863.htm

Mybatis中对List<Object> 对象List的批处理插入操作 http://www.linuxidc.com/Linux/2014-02/96916.htm

MyBatis 的详细介绍请点这里
MyBatis 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-10/124458.htm

linux
相关资讯       Spring  MyBatis多数据源切换 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款