我在一個項目中使用Spring,Spring Data JPA,Spring Security,Primefaces ...如何使用具有動態數據源的Spring AbstractRoutingDataSource?
我跟隨this tutorial關於使用spring進行動態數據源路由。
在本教程中,您只能實現預定義數據源之間的動態數據源切換。
這裏是我的代碼片段:
springContext-jpa.xml
<bean id="dsCgWeb1" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName.Cargest_web}"></property>
<property name="url" value="${jdbc.url.Cargest_web}"></property>
<property name="username" value="${jdbc.username.Cargest_web}"></property>
<property name="password" value="${jdbc.password.Cargest_web}"></property>
</bean>
<bean id="dsCgWeb2" class="org.apache.commons.dbcp.BasicDataSource">
// same properties, different values ..
</bean>
<!-- Generic Datasource [Default : dsCargestWeb1] -->
<bean id="dsCgWeb" class="com.cargest.custom.CargestRoutingDataSource">
<property name="targetDataSources">
<map>
<entry key="1" value-ref="dsCgWeb1" />
<entry key="2" value-ref="dsCgWeb2" />
</map>
</property>
<property name="defaultTargetDataSource" ref="dsCgWeb1" />
</bean>
什麼我想要做的就是讓targetDataSources地圖動態相同的元素了。
換句話說,我希望獲取某個特定數據庫表,使用存儲在該表中的屬性創建數據源我然後把它們放到一個地圖就像targetDataSources。
有沒有辦法做到這一點?
我有類似的功能來實現。在我的情況下,它是運行時創建的許多數據源,用戶,密碼和jdbc URL從'env'數據庫中讀取。所以我所做的就是創建我自己的DataSource接口實現,該接口保留靜態併發映射字段,用於存儲所有動態創建的數據源實例,以及用於保存特定線程正在使用的當前數據源信息的ThreadLocal變量。 – 2014-10-03 09:41:30
你的解決方案沒有任何問題嗎?如果是這樣,這正是我需要的。你能提供你的自定義數據源實現嗎?謝謝:) – 2014-10-03 09:49:34
當然,它的工作原理:)但我不能以現在的方式分享代碼。我會盡我所能將它簡化爲我可以分享它的形式,並將它放在github上並分享它的鏈接。 – 2014-10-03 10:11:36