javascript
Spring+Mybatis多数据源配置
一、配置文件
properties
ds1.driverClassName=com.mysql.jdbc.Driver ds1.url=jdbc:mysql://192.168.200.130:3306/test1?useUnicode=true&characterEncoding=UTF-8 ds1.username=hhh ds1.password=123456 ds2.driverClassName=oracle.jdbc.OracleDriver ds2.url=jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8 ds2.username=qqq ds2.password=123456xml
<bean id="dataSource" class="com.hhhqqq.datasource.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry key="ds1" value-ref="ds1" /> <entry key="ds2" value-ref="ds2" /> </map> </property> <property name="defaultTargetDataSource" ref="ds1" /> </bean> <bean id="ds1" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="driverClassName" value="${ds1.driverClassName}" /> <property name="url" value="${ds1.url}" /> <property name="username" value="${ds1.username}" /> <property name="password" value="${ds1.password}" /> </bean><bean id="ds2" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="driverClassName" value="${ds2.driverClassName}" /> <property name="url" value="${ds2.url}" /> <property name="username" value="${ds2.username}" /> <property name="password" value="${ds2.password}" /> </bean>
二、Java文件
com.hhhqqq.datasource.DynamicDataSource源碼
import java.util.logging.Logger; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource {/** * 取得當前使用那個數據源。 */ @Override protected Object determineCurrentLookupKey() { return DataSourceContextHolder.getDbType(); } public Logger getParentLogger() { // TODO Auto-generated method stub return null; } }
DataSourceContextHolder源碼
public class DataSourceContextHolder {private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); /** * 設置當前數據庫。 * @param dbType */ public static void setDbType(String dbType) { contextHolder.set(dbType); } /** * 取得當前數據源。 * @return */ public static String getDbType() { String str = (String) contextHolder.get(); return str; } /** * 清除上下文數據 */ public static void clearDbType() { contextHolder.remove(); } }三、注意點
Spring單數據源直接在<bean id="dataSource">下配置數據源的各種連接參數。但動態數據源需要配置個各個數據源例如ds1、ds2等。然后在dataSource中動態根據傳遞過來的參數動態調用不同的數據源。
1、當進行訪問時,首先通過DataSourceContextHolder.setDbType("ds1");設置需要使用的數據源。DataSourceContextHolder就是一個用來存儲數據源信息的類,其中通過ThreadLocal來記錄數據源信息。
2、DynamicDataSource類集成Spring的AbstractRoutingDataSource類,通過determineCurrentLookupKey方法來獲取數據源類型,如果沒有對應的數據源則使用defaultTargetDataSource配置。
3、當設置了數據源之后會一直使用該數據源進行連接,除非使用 DataSourceContextHolder.setDbType重新設置數據源或使用DataSourceContextHolder.clearDbType()清除,清除后使用defaultTargetDataSource進行連接。(這點很重要)
轉載自:https://my.oschina.net/qweasfzxc880/blog/621113?p={{page}}
?
轉載于:https://www.cnblogs.com/aaron-shu/p/5985659.html
總結
以上是生活随笔為你收集整理的Spring+Mybatis多数据源配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [CSS] Use CSS Counte
- 下一篇: xib文件的加载方法