2012-04-15 52 views
4

我有一個使用SQL Server Express作爲後端數據庫的Java EE應用程序。我們需要更改數據庫:添加表,添加列,刪除列,合併表,合併列等。在更新Java EE應用程序時遷移數據庫模式

直到今天,我們使用脫機SQL腳本來修改數據庫,但此解決方案是不可擴展和非常錯誤修剪。

我們開始使用具有@PostConstruct裝飾方法的單例啓動bean來添加和刪除系統在部署期間使用的數據。

我們現在還想發佈DML語句,這樣我們就可以在部署期間升級數據庫,並徹底消除SQL腳本。

  1. 有沒有人試過,是不是很好的方向?
  2. 我們應該使用entityManager.unwrap方法還是簡單地將JDBC DataSource資源注入到我們的單例啓動Bean中?
+0

您可以查看一些模式遷移工具的簡要比較。 http://stackoverflow.com/a/28055590/2658613 – gaboroncancio 2015-01-20 21:38:38

回答

6

我們最近開始使用,對此非常滿意。該documentation is very good。簡而言之:你包含一組帶有版本的SQL腳本。 Flyway引擎將拾取尚未應用的SQL腳本(創建一個特殊的元數據表)並運行它們。您可以使用SQL版本或普通Java。

+0

謝謝,我們會檢查它。祝你今天愉快。 – 2012-04-15 13:51:13

5

除了Tomasz的回答,你還可以使用LiquiBase。它提供的解決方案迫使開發人員對他們的模式更改進行「版本控制」,所以當最終到達產品時,您已經有了一個完全可以理解的模式更改日誌。然後,您可以使用LiquiBase將該更改日誌或其任何子集應用於生產數據庫。您也可以回滾更新日誌的子集。

它可以即時處理各種變化,還可以使用自定義遷移Java類。

從未使用過它自己,但它是開源的自2007年以來

這裏有一個快速overview

3

爲了最終確定數據庫遷移工具列表,我對solidbase非常滿意。我們將它作爲部署腳本的一部分來啓動它,但在單例bean中啓動它的想法非常有趣。 Solidbase的wiki沒有記錄這樣的嵌入式使用,但是從源代碼類Runner的快速瀏覽是你正在尋找的。