spring 多資料來源配置實現

來源:互聯網
上載者:User

在網上找到的配置多資料來源的方法。

1.擴充 org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource類

實現代碼

 

代碼

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        // TODO Auto-generated method stub
        return DbContextHolder.getDbType();  
    }

}

 

 

2.實現一個安全執行緒的DbContextHolder類。

 

代碼

public class DbContextHolder {
        private static final ThreadLocal contextHolder = new ThreadLocal();    
        
        public static void setDbType(String dbType) 
        {    
            contextHolder.set(dbType);   
        }    
        
        
        /**
         * 取得dbtype類型
         * @return
         */
        public static String getDbType() 
        {    
            String str=(String) contextHolder.get();
            if(null==str || "".equals(str))
                str="1";
            return str;   
        }    
        
        public static void clearDbType() 
        {    
            contextHolder.remove();   
        }  
}

 

 

3.修改spring的設定檔。

 

代碼

<!--動態選擇資料來源-->  
    <bean id="dataSource" class="tecamo.core.utils.DynamicDataSource">  
        <property name="targetDataSources">  
            <map key-type="java.lang.String">  
                <entry key="1" value-ref="ds1"/>  
                <entry key="2" value-ref="ds2"/>
            </map>  
        </property>  
        <property name="defaultTargetDataSource" ref="ds1"/>  
    </bean>  
    
    
    
    
    
    <!-- 資料來源定義 -->
    <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    
    <bean id="ds2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbcOrcale.driverClassName}"/>
        <property name="url" value="${jdbcOrcale.url}"/>
        <property name="username" value="${jdbcOrcale.username}"/>
        <property name="password" value="${jdbcOrcale.password}"/>
    </bean>

 

 

 

4.切換資料來源方法。

在serverice方法之前調用

DbContextHolder.setDbType("2");表示使用第二個資料來源。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.