2012-09-25 34 views
1

更改數據庫URL連接,我需要使用的會話才能更改數據源的URL或更改爲新的連接當前連接或在運行時建立新的數據源(在我的控制器或服務)的Grails從會議

,如果任何一個能告訴我另一種方式排除多數據源告訴我

謝謝

+0

聽起來真的很特別,這真的是你想要做的嗎?你不能僅僅執行定期查詢和過濾數據嗎? – marko

+0

是當即席但如果我的領域類的名字是用戶 User.get(1)//從DB 1 導致......改變連接 User.get(1)//結果後from DB 2 – Developer

+1

您可以在DataSource.groovy中配置多個數據庫源以及控制器中的使用條件來確定要使用哪個數據源? – ibaralf

回答

3

我有一個辦法,這不是最乾淨的,但應該工作。如果您可以訪問dataSource Spring bean,則可以更改其屬性。您需要讓它關閉所有連接池,然後新的連接將使用新的設置。

您可以像使用任何bean那樣使用依賴注入來獲取數據源,即def dataSourceUnproxied。您必須使用「dataSourceUnproxied」而不是「dataSource」才能獲得真正的DataSource,而不是使用Grails包裝真實代理的事務感知代理。

做完,你可以更改URL,用戶名等這樣的:

dataSourceUnproxied.url = 'some other url' 
dataSourceUnproxied.username = 'some other username' 

然後關閉它迫使所有連接關閉,但復位closed標誌,它誘使重新連接下一次getConnection()被稱爲:

dataSourceUnproxied.close() 
dataSourceUnproxied.closed = false 

這是非常具體的池實現,因爲DataSource接口只有幾個方法。這適用於Grails在默認情況下使用的org.apache.commons.dbcp.BasicDataSource,但如果您使用的是不同的池實現,則需要查看源代碼以獲取等效方法。

+0

謝謝....謝謝...謝謝....我會嘗試這個 – Developer

+0

http://stackoverflow.com/questions/14426796/grails-make-the-connection-to-hibernate-change-dynamic我希望你能幫助我 – Developer