zoukankan      html  css  js  c++  java
  • Spring 数据源配置二:多数据源

    通过上一节  Spring 数据源配置一: 单一数据源   我们了解单一数据源的配置, 这里我们继续多个数据源的配置

    如下(applicationContent.xml 内容)

    一:  Spring  配置:

      <!-- MYSQL 配置   -->
        
        <bean id="mysqlDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName"><value>${mysql.jdbc.driverClassName}</value></property>
            <property name="url"><value>${mysql.jdbc.url}</value></property>
            <property name="username"><value>${mysql.jdbc.username}</value></property>
            <property name="password"><value>${mysql.jdbc.password}</value></property>
        </bean>
    
       
        <bean id="mysqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="mysqlDataSource" />
            <!-- 指定sqlMapConfig总配置文件,订制的environment在spring容器中不在生效-->
             <property  name="configLocation"  value="classpath:mybatis-config-mysql.xml"/>
            <!--指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可,
             当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件 -->
             <property  name="mapperLocations">
                   <list>
                    <value>classpath*:/mysqlmapper/*Mapper.xml</value>
                </list>
             </property>
        </bean>
    
        <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.robin.it.permission.dao" />
            <!-- optional unless there are multiple session factories defined -->
            <property name="sqlSessionFactoryBeanName" value="mysqlSessionFactory" />
        </bean>
         
       <!-- SQL SERVER 配置   -->
          
     
        <bean id="sqlserverDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName"><value>${mssql.jdbc.driverClassName}</value></property>
            <property name="url"><value>${mssql.jdbc.url}</value></property>
            <property name="username"><value>${mssql.jdbc.username}</value></property>
            <property name="password"><value>${mssql.jdbc.password}</value></property>
        </bean>
    
       
        <bean id="sqlserverSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="sqlserverDataSource" />
            <!-- 指定sqlMapConfig总配置文件,订制的environment在spring容器中不在生效-->
             <property  name="configLocation"  value="classpath:mybatis-config-sqlserver.xml"/>
            <!--指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可,
             当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件 -->
             <property  name="mapperLocations">
                   <list>
                    <value>classpath*:/sqlservermapper/*Mapper.xml</value>
                </list>
             </property>
        </bean>
    
        <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.robin.it.mes.dao" />
            <!-- optional unless there are multiple session factories defined -->
            <property name="sqlSessionFactoryBeanName" value="sqlserverSessionFactory" />
        </bean>

      以上配置,分别设置了两个数据(mysql,   sql server),  从黄色高亮来看, 基本做到了以下几点:

    1.  数据来源不同(废话,本来就是多数据源),甚至是数据库厂商不同  (体现在database.properties 文件中)

    2.   mybatis + 数据库分页引擎不同  (体现在  mybatis-config-*.xml  这类文件中)

    3.   mybastis 对应的XML  sql 文件不同 (体现在不同路径 的/*Mapper.xml)

    4.    mapper 文件路径不同(体现在  MapperScannerConfigurer 下的   com.robin.it.*.dao)

    综合以上四点,可以看出,多数据源,基本是单一数据源配置的 ”叠加“ , 只要将上面4点里面提到的内容分离。

    二:  database.properties  参加:    Spring 数据源配置一: 单一数据源   

    三:  mybatis-config-*.xml  的区别在于,数据引擎不同导致的,方言不同

     mybatis-config-mysql.xml

    <configuration>
         <settings>
            <setting name="cacheEnabled" value="false" />
            <setting name="lazyLoadingEnabled" value="false" />
            <setting name="aggressiveLazyLoading" value="false"/>
            <setting name="jdbcTypeForNull" value="NULL"/>
        </settings>
        <plugins>
            <plugin interceptor="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">
                <property name="dialectClass" value="com.github.miemiedev.mybatis.paginator.dialect.MySQLDialect"/>
            </plugin>
        </plugins>
        
    </configuration>

    mybatis-config-sqlserver.xml

    <configuration>
    
         <settings>
            <setting name="cacheEnabled" value="false" />
            <setting name="lazyLoadingEnabled" value="false" />
            <setting name="aggressiveLazyLoading" value="false"/>
            <setting name="jdbcTypeForNull" value="NULL"/>
        </settings>
        
        <plugins>
            <plugin interceptor="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">
                <property name="dialectClass" value="com.github.miemiedev.mybatis.paginator.dialect.SQLServerDialect"/>
            </plugin>
        </plugins>
        
    </configuration>

    四:  *mapper.xml 的路径不同

    =========================================================================================

    到此,多数据的配置基本完成, So easy.  but....

    我们需要解决的几个问题如下:

    1.  如果以上2个数据,数据表,结构业务等均不通,那以上配置没有问题(此次没有加入事务),如果是相同的数据源的不同拷贝(如master/ slaver)呢?

    那么mapper.xml/   xxxDao/  等代码都应该完全相同(即以上提到的4点,不做分离,均只有一份),  如何做到切换数据源?

    2.    同一个Service 不同方法,如果动态选择数据?(以便做读写分离)

    3......

    4....

     继续想.....

  • 相关阅读:
    Shell之海量数据处理grep,cut,awk,sed
    [Linux] Migrate plugins and setting for vim
    [C++] Template
    c++ Dynamic Memory (part 2)
    Image process
    c++ Dynamic Memory (part 1)
    [Algorithm] A* Search Algorithm Basic
    [C++] Solve "No source available for main()" error when debugging on Eclipse
    [C++] Solve "Cannot run program "gdb": Unknown reason" error
    [C++] Solve "Launch Failed. Binary not found." error on Eclipse
  • 原文地址:https://www.cnblogs.com/dragonflyyi/p/4706251.html
Copyright © 2011-2022 走看看