2011-11-18 41 views
3

我有一個用戶可以在自己的服務器上部署的彈簧web應用程序。應用程序運行後,管理員可以從前端設置數據庫URL和憑據,並且沒有默認設置。我不知道如何使用spring/hibernate來做到這一點,因爲在我的spring容器的初始化過程中創建LocalSessionFacytoryBean後,我的數據源就會被連線。在運行時更改彈簧數據源設置

+0

看來你並沒有使用OSGi,但是如果你是這樣的話,你可以將你的DataSource作爲一個osgi服務公開,並根據需要註冊/取消註冊這些服務(以及它們包含的)bundle以更改你的DatSource。 – whaley

+0

'爲他們的機構部署':究竟意味着什麼?將有一個數據庫和一些Web服務器運行在他們的服務器上,並部署你的戰爭呢? –

回答

2

如果您的應用程序服務器支持它並且它不會讓您的用戶變得複雜,那麼您可以使用JNDI數據源。它們可以在應用程序服務器上進行配置,但與在運行時更改它們不同。

1

您可以在運行時使用自定義數據源構建SessionFactory對象,並使用該對象。沒有什麼能阻止你。

+0

這樣做的問題是我的會話工廠在彈簧容器的初始化過程中無法接入,因爲它直到以後的日期才被設置。這意味着一旦創建了sesssion工廠,我必須在運行時明確地設置所需的依賴關係,或者我錯過了什麼? – mogronalol

+0

是的,你可以手動創建一切,然後把它放在彈簧 – Bozho

+0

我還沒有跟着你。我將不得不從我的WebApplicationContext中檢索需要會話工廠的每個bean,然後在運行時創建該類字段。從某種意義上說,這看起來並不是最優雅的做事方式和打破IOC的方式 - 我寧願在某種類型的會話工廠代理中進行自動裝配,然後在創建代理後更改該代理的會話工廠。有沒有辦法做到這一點? – mogronalol