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....

 繼續想.....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM