关闭

Spring+Mybatis多数据源配置(一)——MySQL与Oracle通过配置切换

标签: mybatisspring
10442人阅读 评论(0) 收藏 举报
分类:

在小型项目中,一般配置一个数据库,也就是一个mybatis数据源,但是有时候需要同时支持两种数据库,比如mysql和oracle. 最笨的方法就是配置两个spring配置文件,然后根据不同的部署,采用不同的配置文件,其实这两个配置文件可以合成一个配置文件,通过java的properties文件进行配置。

首先说明下配置单个数据库,也就是单个数据源的配置。

首先看一下spring的配置文件applicationContext.xml(这里采用的是spring+mybatis,所以有关数据库的及mybatis的配置都在这里):

<?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:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:tx="http://www.springframework.org/schema/tx" 
        xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd
        http://www.springframework.org/schema/aop 
        classpath:/org/springframework/aop/config/spring-aop-3.0.xsd
        http://www.springframework.org/schema/context
        classpath:/org/springframework/context/config/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx 
        classpath:/org/springframework/transaction/config/spring-tx-3.0.xsd">

	<!-- IoC配置 -->
	<!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 -->
	<context:component-scan base-package="com.shr.dao" />
	<context:component-scan base-package="com.shr.service" />
    
	<!-- DAO配置 -->
	<context:property-placeholder location="classpath:config.properties"/>
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" 	value="${driver}"/>
		<property name="url" 		value="${url}"/>
		<property name="username" 	value="${userName}"/>
		<property name="password" 	value="${password}"/>
	</bean>
	
    <bean name="myBatisSQLInterceptor" class="com.shr.dao.MyBatisSQLInterceptor"></bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.shr.dao.pojo,com.shr.dao.model" />
        <property name="mapperLocations">
            <list>
                <value>classpath:com/shr/dao/resources/mappers/*_mapper.xml</value>
            </list>
        </property>
        <!-- <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/> -->
        <property name="typeHandlersPackage" value="com.shr.dao" />
        <property name="plugins">
        	<list>
        		<ref bean="myBatisSQLInterceptor"/>
        	</list>
        </property>
    </bean>
    
    <!-- 配置事务管理器 -->
    <tx:annotation-driven/>
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.shr.dao.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> 
        <!-- <property name="markerInterface" value="com.shr.dao.mapper.ITemplateMapper"/> -->
    </bean>
</beans>
properties配置文件内容为:
 #mysql configuration
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://10.10.193.111:3306/sp5000?useUnicode=true&characterEncoding=UTF-8
username=shr
password=shr
通过properties配置文件可以看到我们所配的数据库是mysql.

在applicationContext.xml文件中,我们只配置了一个数据源,就是“dataSource”,存放mybatis配置文件的地方为:

       <property name="mapperLocations">
            <list>
                <value>classpath:com/shr/dao/resources/mappers/*_mapper.xml</value>
            </list>
        </property>
接下去,进行配置双数据源,通过properties配置文件进行切换,我们首先看下config.properties文件的内容:

# oracle configuration
 ora_driver=oracle.jdbc.driver.OracleDriver
 ora_url=jdbc:oracle:thin:@10.10.195.185:1521:sp5000
 ora_username=shr
 ora_password=shr

 #mysql configuration
 mysql_driver=com.mysql.jdbc.Driver
 mysql_url=jdbc:mysql://10.10.193.111:3306/sp5000?useUnicode=true&characterEncoding=UTF-8
 mysql_username=shr
 mysql_password=shr

 dataSource=mysql
可以看到分别对mysql以及oracle的数据库进行了配置,并且标注了“dataSource”这个字段,这个就是进行数据源切换的配置。

接着来看一下修改后的applicationContext.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:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:tx="http://www.springframework.org/schema/tx" 
        xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd
        http://www.springframework.org/schema/aop 
        classpath:/org/springframework/aop/config/spring-aop-3.0.xsd
        http://www.springframework.org/schema/context
        classpath:/org/springframework/context/config/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx 
        classpath:/org/springframework/transaction/config/spring-tx-3.0.xsd">

	<!-- IoC配置 -->
	<!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 -->
	<context:component-scan base-package="com.shr.dao" />
	<context:component-scan base-package="com.shr.service" />
    
	<!-- DAO配置 -->
	<context:property-placeholder location="classpath:config.properties"/>
	<bean id="mysql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" 	value="${mysql_driver}"/>
		<property name="url" 		value="${mysql_url}"/>
		<property name="username" 	value="${mysql_username}"/>
		<property name="password" 	value="${mysql_password}"/>
	</bean>
	<bean id="oracle" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" 	value="${ora_driver}"/>
		<property name="url" 		value="${ora_url}"/>
		<property name="username" 	value="${ora_username}"/>
		<property name="password" 	value="${ora_password}"/>
	</bean>

    <bean name="myBatisSQLInterceptor" class="com.shr.dao.MyBatisSQLInterceptor"></bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="${dataSource}" />
        <property name="typeAliasesPackage" value="com.shr.dao.pojo,com.shr.dao.model" />
        <property name="mapperLocations">
            <list>
                <value>classpath:com/shr/dao/resources/${dataSource}mappers/*_mapper.xml</value>
            </list>
        </property>
        <!-- <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/> -->
        <property name="typeHandlersPackage" value="com.shr.dao" />
        <property name="plugins">
        	<list>
        		<ref bean="myBatisSQLInterceptor"/>
        	</list>
        </property>
    </bean>
    
    <!-- 配置事务管理器 -->
    <tx:annotation-driven/>
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="${dataSource}"/>
    </bean>
    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.shr.dao.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> 
        <!-- <property name="markerInterface" value="com.shr.dao.mapper.ITemplateMapper"/> -->
    </bean>
</beans>
可以看到这里配置了两个数据源,分别为“mysql”和“oracle”,这个值对应config.properties配置文件中的dataSource字段。通过${dataSource}可以引用不同的数据源。

由于mysql和oracle之间sql语法有一定的差异性,所以这里需要采用两种不同的mybatis配置文件:

        <property name="mapperLocations">
            <list>
                <value>classpath:com/shr/dao/resources/${dataSource}mappers/*_mapper.xml</value>
            </list>
        </property>
根据这个配置可以关联两种不同的mybatis配置文件,譬如mysql对应classpath:com/shr/dao/resources/mysqlmappers/*_mapper.xml。
以上这些是最简单的配置,如果需要进一步深入了解,敬请期待这个系列的下一篇博文。


3
6
查看评论

spring整合Mybatis oracle数据库连接配置(dbcp)

Spring + Mybatis +Struts
  • dbsjack
  • dbsjack
  • 2017-03-22 23:14
  • 3102

springMVC+MyBatis+Oracle+Web实现增删改查完整案例+数据库数据)

  • 2015-09-11 15:56
  • 8.43MB
  • 下载

springMVC+MyBatis+Oracle+Web实现增删改查(附带完整案例+数据库数据)

在网上也是搜索很多资料一点点学到现在。东西整合在一起,希望对各位有所帮助 一、准备工作: 1.先看下目录结构 2.需要的jar包 二、配置文件解读 配置文件有这么几个    web.xml,springMvc的配置文件(spring-mvc.xml,daoContext....
  • zhaoxiaoyueyue
  • zhaoxiaoyueyue
  • 2015-09-11 13:58
  • 8288

Spring boot---整合mybatis (oracle)

我在网上找了很多教程,去连接oracle数据,都是使用的配置xml文件,我在使用中,总是提示方法找不到,我在包里也看不到这个方法,不知道是不是版本的问题,也没找到类似问题的答案,有同学要是知道,麻烦告诉我一下。 oracle的配置流程,需要先参看我的上一篇文章mysql数据的配置,...
  • huyishero
  • huyishero
  • 2017-02-13 13:51
  • 7244

单个工程中Spring+Mybatis连接多个数据库的配置(个人分享版本)

上一篇博客说到同一个问题,经过和朋友的研究已经参考网上的资料,现在给出一份更简洁的配置。 情景:现在单个工程中需要连接两个库,这两个库在同一个mysql中,两个库都需要进行读写。 解决: 第一步:将spring和mybatis整合,这个过程就不具体演示了,在这个过程中创建了直接使用的五个配置文件、两...
  • millery22
  • millery22
  • 2015-10-28 10:29
  • 30001

Spring+Mybatis 多数据源配置

项目目录结构如下:           spring配置文件 Xml代码   xml version="1.0" encoding="UTF...
  • xwnxwn
  • xwnxwn
  • 2016-12-27 11:06
  • 865

MyBatis多数据源配置(读写分离)

MyBatis多数据源配置(读写分离)首先说明,本文的配置使用的最直接的方式,实际用起来可能会很麻烦。实际应用中可能存在多种结合的情况,你可以理解本文的含义,不要死板的使用。多数据源的可能情况1.主从通常是MySql一主多从的情况,本文的例子就是主从的情况,但是只有两个数据源,所以采用直接配置不会太...
  • isea533
  • isea533
  • 2015-07-09 13:45
  • 55629

spring的多数据源配置(spring+ibatis + oracle环境下)

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop=&q...
  • HUXU981598436
  • HUXU981598436
  • 2016-12-07 17:49
  • 791

spring多数据源配置

一、问题提出 项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。例如在一个spring和hibernate的框架的项目中,我们在spring配置中往往是配置一个dataSource来连接数据库,然后...
  • we_shell
  • we_shell
  • 2015-05-29 17:52
  • 1124

javaWeb 同时连接Oracle和MySQL

原Oracle数据库的项目同时兼容MySql步骤: (一)修改资源配置文件applicationContext-dataSource.xml的数据库连接 Oracle数据库中加上from dual的原因:Oracle数据库中自带了一个虚拟表dual,这个的作用是测试数据库...
  • yisun123456
  • yisun123456
  • 2018-01-24 11:51
  • 21
    最新资讯
    欢迎支持《RabbitMQ实战指南》 and 关注微信公众号:朱小厮的博客。
    个人资料
    • 访问:1058002次
    • 积分:12001
    • 等级:
    • 排名:第1478名
    • 原创:213篇
    • 转载:15篇
    • 译文:3篇
    • 评论:803条
    最新评论
    博客专栏