2016-05-10 21 views
0

我想在Grails 2.5.x應用程序中解決一個非常具體的需求:我想在應用程序啓動之前通過應用一系列數據庫轉換腳本來升級數據庫模式(取決於數據庫版本/應用程序版本)。過去我們在一個「傳統」的Java Servlet應用程序中完成了這項工作,但我正在爲Grails苦苦掙扎。Grails中是否存在GORM初始化鉤子?

問題:是有一個事件,Grails中,我能以某種方式應用程序啓動時,將允許我使用Groovy和現有的數據源配置過程中鉤到,但在GORM /休眠啓動前會發生?

一些選項我已經檢查:

  • 自舉的init關閉將不會在這裏工作,因爲應用程序根本不會與「驗證」模式開始,如果數據庫模式已經過時。
  • 還有一些我以前沒有用過的Events.groovy,但似乎這些事件是針對grails編譯/生成生命週期的,而不是將自包含的應用程序打包在WAR文件中並部署到應用程序容器。
  • grails database-migration插件看起來很相似,希望Grails命令行在目標服務器上可用,和轉換由管理員手動執行。 事實證明,我很可能在這裏錯了。
+1

實際上,您可以讓數據庫遷移在應用程序啓動時自動運行,而不是純手動。我建議你再看看這個插件,因爲它正是你正在尋找的。 –

+0

謝謝Joshua - 我會檢查出來的!也許我在快速閱讀插件描述後得到了錯誤的想法。 – Rado

+1

grails.plugin.databasemigration.updateOnStartFileNames = ['your-db-specific-changelog-filename.groovy'] < - 我們數據庫的所有修訂都是通過遷移腳本完成的。我們有不同的腳本,取決於h2,Oracle,SQLServer,MySQL。數據庫遷移通常非常有能力。 – railsdog

回答

0

雖然我還沒有真正找到一種方法來掛接到Grails的啓動時啓動格姆發生(和執行數據庫驗證或創建)有執行自定義數據庫遷移代碼通過自舉初始化一個簡單的辦法之前,通過禁用所有Hibernate的hbm2ddl(只是省略了任何有效的dbCreate值)。

對於我們的項目,我們最終使用了數據庫遷移插件,但我很快意識到爲了正常工作,您還必須禁用hhm2ddl。如果使用validate選項,則GORM將嘗試驗證數據庫,然後發生數據庫遷移,並且該應用程序無法啓動。

因此,如果想提供數據庫升級/遷移代碼的自定義實現,可以使用相同的方法 - 禁用hbm2ddl將允許它運行而不會干擾hibernate的數據庫模式驗證。明顯的缺點是驗證模式不能再使用。

相關問題