SpringMVC動態切換多個數據源解決方案(自測可用)
SpringMVC動態切換多個數據源解決方案
1.資料來源配置
<!-- 事務 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager ="transactionManager"/>
<!-- 資料來源1 -->
<bean id="coreDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>${db.mysql.core.url}</value>
</property>
<property name="username">
<value>${db.mysql.core.username}</value>
</property>
<property name="password">
<value>${db.mysql.core.password}</value >
</property>
<!-- 初始化連線大小 -->
<property name="initialSize" value="1"/>
<!-- 連線池最大使用連線數量 -->
<property name="maxTotal" value="20"/>
<!-- 連線池最大空閒 -->
<property name="maxIdle" value="20"/>
<!-- 連線池最小空閒 -->
<property name="minIdle" value="1"/>
<!-- 獲取連線最大等待時間 -->
<property name="maxWaitMillis" value="60000"/>
<property name="validationQuery" value="select 1 from dual"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<property name="testWhileIdle" value="true"/>
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一個連線在池中最小生存的時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="28800000"/>
</bean>
<!-- 資料來源2 -->
<bean id="reportDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>${db.mysql.report.url}</value>
</property>
<property name="username">
<value>${db.mysql.report.username}</value>
</property>
<property name="password">
<value>${db.mysql.report.password}</value>
</property>
<!-- 初始化連線大小 -->
<property name="initialSize" value="1"/>
<!-- 連線池最大使用連線數量 -->
<property name="maxTotal" value="20"/>
<!-- 連線池最大空閒 -->
<property name="maxIdle" value="20"/>
<!-- 連線池最小空閒 -->
<property name="minIdle" value="1"/>
<!-- 獲取連線最大等待時間 -->
<property name="maxWaitMillis" value="60000"/>
<property name="validationQuery" value="select 1 from dual"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<property name="testWhileIdle" value="true"/>
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一個連線在池中最小生存的時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="28800000"/>
</bean>
<bean id="dataSource" class="com.xiaomi.dev.service.datasource.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="coreDataSource" key="core"></entry>
<entry value-ref="reportDataSource" key="report"></entry>
</map>
</property>
<!-- 預設使用server的資料來源 -->
<property name="defaultTargetDataSource" ref="coreDataSource"></property>
</bean>
<!-- spring和MyBatis完美整合,不需要mybatis的配置對映檔案 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!-- 自動掃描mapping.xml檔案 -->
<property name="mapperLocations" value="classpath:sqlmap/*.xml"></property>
</bean>
<bean class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
2. DataSourceConst.java
public class DataSourceConst {
public static final String CORE = "core";
public static final String REPORT = "report";
}
3. DynamicDataSource.java
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSourceType();
}
}
4. DataSourceContextHolder.java
public class DataSourceContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal();
public static void setDataSourceType(String dataSourceType) {
contextHolder.set(dataSourceType);
}
public static String getDataSourceType() {
return (String) contextHolder.get();
}
public static void clearDataSourceType() {
contextHolder.remove();
}
}
5. 資料庫查詢前切換到指定庫
// 切換為report庫
DataSourceContextHolder.setDataSourceType(DataSourceConst.REPORT);
// 切換為core庫
DataSourceContextHolder.setDataSourceType(DataSourceConst.CORE);
相關推薦
SpringMVC動態切換多個數據源解決方案(自測可用)
SpringMVC動態切換多個數據源解決方案 1.資料來源配置 <!-- 事務 --> <bean id="transactionManager"
AngularJS $q 和 $q.all 單個數據源和多個數據源合並(promise的說明)
獲取 lar debug let index 被拒 可用 第一個 brush 這篇文章講的不錯, angular $q 和 promise!! -------------------------------------------------------------- 通
Spring Boot實現多個數據源教程收集(待實踐)
get shu 多個 href eos net -c smi tar 先收集,後續實踐。 http://blog.csdn.net/catoop/article/details/50575038 http://blog.csdn.net/neosmith/article
hibernate配置多個數據源及事物(以兩個資料來源為例)
在ssh專案中,需要連線兩個不同ip下的資料庫,所以必須要給hibernate配置兩個或多個數據源 因為我只有一臺電腦,所以我配置的是sqlserver+mysql兩個資料來源 首先hibernate配置是直接從myeclipse中新增的 右鍵----myeclipse
單個工程中Spring+Mybatis連線多個數據庫的配置(個人分享版本)
上一篇部落格說到同一個問題,經過和朋友的研究已經參考網上的資料,現在給出一份更簡潔的配置。 情景:現在單個工程中需要連線兩個庫,這兩個庫在同一個mysql中,兩個庫都需要進行讀寫。 解決: 第一步:將spring和mybatis整合,這個過程就不具體演示了,在這個過程中建立
win10環境下配置django2.0.4+Apache2.4+python3.6專案,以及Django靜態檔案、Apache多專案配置的解決方案(親測)
1 安裝django, Apache,python 要求Apache和python位數一致,比如我的Apache2.4-x86和 python3.6-32位 我的安裝位置: Apache2.4 --- E:\Apache24 python3.6---E:\pht
轉 Android SDK Manager國內無法更新的解決方案(親測有效)
轉自 Android SDK Manager國內無法更新的解決方案(親測有效) 現在由於GWF,google基本和咱們說咱見了,就給現在在做Android 或者想學習Android 的朋友帶來了諸多的不便,最簡單的就是Android SDK Manager 你無法更新了。 現在這裡有一
IDEA建立struct2問題報錯解決方案(親測有效)
報錯案例 [2018-10-06 03:30:14,199] Artifact untitled1:war exploded: Artifact is being deployed, please wait... 06-Oct-2018 15:30:14.824 警告 [RM
新建的webservice本地測試除錯,只能localhost訪問不能ip訪問的解決辦法(親測可用)
用管理員身份執行VS(這個設定目前測試適用於使用了express版本)。 右鍵點選IIS Express ==》顯示所有應用程式,下面有配置,用VS開啟配置 3.開啟applicationhost.config檔案,找到sites節點,找到自己的webservice的site節點,然後新增繫結ip和埠
“ADB Interface”安裝失敗的問題解決方案(親測可行)
在學習Android的過程中,想要通過真機對應用程式進行除錯,電腦連線USB安裝驅動時並不順利,彈出提示為 ADB Interface驅動未安裝,如圖: Android ADB Interface是一個支援android和PC連線的程式,通過它Windows就可以自動識別並安裝驅動軟
SpringCloud之基於SpringCloud+MybatisPlus+Config實現多個數據源的動態切換
一、首先,專案基於SpringCloud,配置檔案在Git上(包括資料來源的配置資訊)。 二、開始基於原有專案進行重構 1、寫一個動態資料來源上下文.程式碼如下: /** * 動態資料來源上下文 */ public class DbContextHolder { p
Spring配置多個數據源,並實現資料來源的動態切換
1.首先在config.properties檔案中配置兩個資料庫連線的基本資料。這個省略了 2.在spring配置檔案中配置這兩個資料來源: 資料來源1 <!-- initialSize初始化時建立物理連線的個數0 maxActive最大
Spring動態切換多數據源解決方案
http aso 解決 目標 可能 bcp pro start map spring動態配置多數據源,即在大型應用中對數據進行切分,並且采用多個數據庫實例進行管理,這樣可以有效提高系統的水平伸縮性。而這樣的方案就會不同於常見的單一數據實例的方案,這就要程序在運行時根據當時的
Delphi動態鏈接多個數據源執行操作例子
ado btn form ldb var 運行 數據源 ons user 1.首先配置文件[SubExamDep1]DBSERVER=(local)DBNAME=herpeisweixinUSERNAME=saPWD=bjbrMSG=SubExamDep1失敗[SubExa
Spring Profile和Mybatis進行多個數據源(H2和Mysql)的切換
sql pda 開箱 https tails val 收集 sqlserver jpetstore 總結: 最近在做WebMagic的後臺,遇到一個問題:後臺用到了數據庫,本來理想情況下是用Mysql,但是為了做到開箱即用,也整合了一個嵌入式數據庫H2。這裏面就有個問題了,
分散式事務--XA 解決多個數據源操作
個人備忘 事務(官方解釋):是由一組sql語句組成的“邏輯處理單元”。 事務具有如下四個屬性,通常稱為事務的ACID屬性 : 1. 原子性(Atomicity): 事務是一個原子操作單元,要麼都執行,要麼都不執行。 2. 一致性(Consistent):
使用Spring Profile和Mybatis進行多個數據源(H2和Mysql)的切換
轉載自:http://my.oschina.net/flashsword/blog/209872 最近在做WebMagic的後臺,遇到一個問題:後臺用到了資料庫,本來理想情況下是用Mysql,但是為了做到開箱即用,也整合了一個嵌入式資料庫H2。這裡面就有個問題了,如何用
一個程式配置多個數據源,並進行資料來源切換
1>.在資料庫連接配置檔案中配置,資料庫連線資訊,資料來源選擇器,多個數據源資訊,sql會話工廠 <!-- 在applicationContext-dao.xml引入資料庫資訊配置檔案db.properties --> <bean id="prope
EJB 配置多個數據源
name XML cti kong 添加 local ima 不能 transacti 1.修改jboss-6.simple\server\default\deploy\transaction-jboss-beans.xml 配置文件 <bean name="Co
多個數據源(multiple data sources)
art multipl spring detail 多個 教程 boot net sdn 參考資料: SpringBoot非官方教程 | 第五篇:springboot整合 beatlsql多個數據源(multiple data sources)