• web项目中配置多个数据源


    web项目中配置多个数据源

    spring + mybatis 多数据源配置有两种解决方案

    1、配置多个不同的数据源,使用一个sessionFactory,在业务逻辑使用的时候自动切换到不同的数据源,   有一个种是在拦截器里面根据不同的业务现切换到不同的datasource;

       有的会在业务层根据业务来自动切换。

    2、在spring项目中配置多个不同的数据源datasource,配置多个sqlSessionFactory,每个sqlSessionFactory对应一个datasource      在dao 层根据不同业务自行选择使用哪个数据源的session来操作。

          使用请参考文章:http://blog.csdn.net/zhmz1326/article/details/52041918

    具体讲解方法1:

    (一)配置

    1. <!-- 配置mysql -->  
    2.     <bean id="mysql_dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
    3.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
    4.         <property name="url" value="jdbc:mysql://127.0.0.1:3306/colleges" />  
    5.         <property name="username" value="root" />  
    6.         <property name="password" value="root" />  
    7.     </bean>  
    8.       
    9.     <!-- 配置postgs -->  
    10.      <bean id="postgs_dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
    11.         <property name="driverClassName" value="org.postgresql.Driver" />  
    12.         <property name="url" value="jdbc:postgresql://114.215.83.3:5432/coges" />  
    13.         <property name="username" value="postgres" />  
    14.         <property name="password" value="postgres" />  
    15.     </bean>  
    16.       
    17.     <!-- 配置动态数据源 -->  
    18.      <bean id ="dataSource" class"com.mote.dc.changedb.DynamicDataSource" >    
    19.           <property name ="targetDataSources">    
    20.                 <map key-type ="java.lang.String">    
    21.                       <entry value-ref ="postgs_dataSource" key"postgs_dataSource"></entry >    
    22.                       <entry value-ref ="mysql_dataSource" key"mysql_dataSource"></entry >    
    23.                 </map >    
    24.           </property>    
    25.           <!-- 默认使用mysql -->    
    26.           <property name ="defaultTargetDataSource" ref"mysql_dataSource"></property >        
    27.    </bean>  


    (二)创建数据源名称常量类

    1. @SuppressWarnings("all")  
    2. public class DataSourceType {  
    3.       
    4.     public  static final String  SOURCE_MYSQL = "mysql_dataSource";  
    5.       
    6.     public  static final String  SOURCE_POSTGS = "postgs_dataSource";  
    7.   
    8. }  


    (三)创建负责切换数据源的类


    1. public class DataSourceContextHolder {  
    2.     private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();    
    3.         
    4.     public static void setDbType(String dbType) {    
    5.            contextHolder.set(dbType);    
    6.     }    
    7.    
    8.     public static String getDbType() {    
    9.            return ((String) contextHolder.get());    
    10.     }    
    11.    
    12.     public static void clearDbType() {    
    13.            contextHolder.remove();    
    14.     }    
    15. }  


    (四) 建立动态数据源类,该类必须继承AbstractRoutingDataSource,且实现方法determineCurrentLookupKey


    1.   
    1. import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;  
    2.   
    3. public class DynamicDataSource extends AbstractRoutingDataSource{  
    4.   
    5.     @Override  
    6.     protected Object determineCurrentLookupKey() {  
    7.         return DataSourceContextHolder. getDbType();  
    8.     }  
    9.   
    10. }  


    (五)当需要使用某个数据库的时候,使用下面一行代码进行切换


    1. //切换数据库  
    2. DataSourceContextHolder.setDbType(DataSourceType.SOURCE_POSTGS);  


    ok了

    原文链接:http://blog.csdn.net/qq_37936542/article/details/78550424

  • 相关阅读:
    20200304(10)
    20200303Tuesday(9)
    词根词缀explicit(8)
    词根词缀(7)
    20200303(6)
    什么是ring0-ring3
    20200301a
    mark字体大全
    评估评价 提高专项(5)
    图的广度优先遍历算法
  • 原文地址:https://www.cnblogs.com/wangting888/p/9701947.html
Copyright © 2020-2023  润新知