zoukankan      html  css  js  c++  java
  • Spring+Mybatis多数据源配置(一)——MySQL与Oracle通过配置切换

    在小型项目中,一般配置一个数据库,也就是一个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。

  • 相关阅读:
    HDU 5585 Numbers
    HDU 3308 LCIS
    POJ 2991 Crane
    POJ 1436 Horizontally Visible Segments
    POJ 3667 Hotel
    HaiHongOJ 1003 God Wang
    【SDOI 2008】 递归数列
    5月19日省中提高组题解
    【HDU 1588】 Gauss Fibonacci
    【POJ 3233】Matrix Power Series
  • 原文地址:https://www.cnblogs.com/wsy0202/p/12955877.html
Copyright © 2011-2022 走看看