2012-12-05 32 views
4

我們有一個使用Spring/JPA/Hibernate的Web應用程序。目前,我們正在使用SolidBase進行數據庫更改管理,這在管理的部署模型中運行良好 - 但現在我們正在遷移到非託管部署模型,用戶將能夠下載Web應用程序。我們正在爲Web應用程序構建「更新中心」類型功能,並試圖弄清楚我們應該如何應用數據庫更改。Web應用程序的更新中心和數據庫變更管理

理想情況下,我希望應用程序在應用程序啓動時應用任何未決的數據庫更改,我希望這是我們可以在語法上編寫代碼的東西,但我不想重寫Hibernate的SchemaExport功能來執行此操作。

有沒有人有任何建議,模式或最佳實踐來說明我們如何才能在我們的應用程序中最好地實現此功能?

是否有任何更新中心應用程序庫將解決我們的問題(我一直沒能找到一個)?

+0

也許你有一個很好的理由來做到這一點。不過,這是我的兩分錢。 如果您要在應用程序啓動期間執行模式更新,則需要爲您的「應用程序/用戶」帳戶數據庫所有者提供訪問權限。這可能會暴露應用程序中的一些安全漏洞。我建議你在應用程序啓動時不要更改數據庫模式。或者至少要關心你使用的DB連接帳戶。就我個人而言,我會在應用程序之外執行所有數據庫模式更新,即手動 - 但那只是我自己。 – Nabheet

+0

如果管理應用程序的每個人都碰巧是DBA,那麼這將非常棒 - 問題在於它將是維護應用程序的最終用戶。我們需要將*更新推送到應用程序的能力,很可能應用程序的這些更新的很大一部分都會有相應的模式更改。已經有一個數據用戶和一個模式用戶,模式用戶只能在應用程序啓動時專門用於此任務。 –

回答

1

我發現這篇文章,而研究這個

http://www.infoq.com/news/upgrade-frameworks

這使我這個帖子

http://www.jroller.com/mrdon/entry/transparent_sql_schema_migration_with

最終導致我的滾動使用Apache DdlUtils我自己解決這個問題以及jroller.com博客文章中提供的BeanFactory解決方案。

這最終將成爲一個組件,可以放入任何應用程序,遺留或新的應用程序中實現更新功能。它將使用XML來應用數據庫更新並使用DDL,這意味着該軟件包可以針對任何支持的數據庫工作。更新程序還將支持文件系統資源和數據本身的更新(與模式相對)

0

我不適用於BitRock。

這可能不是您正在尋找的內容,但我使用InstallBuilder from Bitrock來管理分佈式應用程序的這些類型的更新。這是PostgreSQL團隊使用的安裝程序包。這是非常簡單的工作,以最小的麻煩。特別是與其他安裝程序相比時。

+0

看起來很有趣,但它看起來並不像它解決了我確切的問題。這個難題的獨特之處在於它是一個Web應用程序,因此它有自己的一套要求,即它必須是可以直接集成到應用程序中的東西。 –

+0

@ChrisSchmidt您能否詳細說明您直接集成的含義?我想我在這裏斷開連接,因爲它是一個分佈式應用程序,用戶可以有一個本地實例,也可以與遠程「母座」通信正確嗎? – Woot4Moo

+0

當然 - 直接集成我的意思是功能應該存在於應用程序本身中,而在這個包中,它全部維護在應用程序之外。這是一個Web應用程序,它很可能在無頭的服務器上運行,這使得CM無法管理這種情況。本地實例不會與母船*其他*進行通信,而是要求更新。這是否回答你的問題? –

相關問題