2009-08-08 83 views
4

我想聲明一個指向DB2數據庫的Spring數據源。目前,我正在使用org.springframework.jdbc.datasource.DriverManagerDataSource來設置連接,但沒有找到任何方式在數據源bean的數據庫中指定數據庫模式。任何人都可以幫助我嗎?Spring數據源和數據庫模式

回答

10

問題是沒有標準的方式來設置模式,每個數據庫都有不同的機制。

一個解決辦法是設置模式作爲數據庫URL的一部分...

DB2的URL看起來像:

jdbc:db2://SERVER_NAME:PORT/DATABASE:currentSchema=SCHEMA_NAME;

希望幫助..

特別說明:確保你添加了分號;在URL的結尾處,否則您會收到錯誤,指出網址無效。最後還要確保沒有什麼;存在(甚至沒有空格)。

+0

最後一個註釋僅適用於db2。 – gdrt 2018-02-28 09:16:33

2

沒有辦法用標準的Spring命名空間來做到這一點。羅布哈羅普的一個request響應架構添加到配置:

在一般情況下,由於沒有真正的優雅和高性能的方式通過裝飾來做到這一點這種功能應該推入連接池。池可以爲每個創建的連接設置一次模式,而在這裏您必須在每次連接被檢索時設置它。

如果您不顧一切地在您的配置中設置代理,那麼提交者爲代理提供了一些代碼,以允許指定模式。

+0

那麼這是否意味着可以像使用c3p0時那樣僅爲池指定模式。因爲在使用c3p0連接池時找不到任何資源來指定模式。 – Barun 2009-08-08 10:19:56

+0

對不起,我從來沒有使用過C3p0,所以我只能猜測如何設置它 – 2009-08-08 10:57:22

+0

我認爲在這種情況下,「連接池」意味着你正在使用的應用服務器:WebLogic,JBOSS,Glassfish,Tomcat,Jetty,上帝保佑,WebSphere。 – duffymo 2009-08-08 11:39:33

0

如果您的連接使用模式的所有者作爲用戶,那麼該連接將指向該特定模式。 即。如果用戶user1是名爲schema1的數據庫模式的所有者,那麼如果使用用戶user1連接到數據庫,則默認情況下連接將指向schema1。

我們使用了Spring提供的UserCredentialsDataSourceAdapter來基於登錄用戶連接到不同的模式。這提供了指向基於用戶的特定模式的數據源。這使用基於線程的登錄信息。每個線程都必須決定連接哪個模式並根據該模式提供給用戶。