2012-08-27 52 views
3

Grails 2.0的一個優點是可以在開發中更改域類而無需重新啓動應用程序服務器。這有效,但是當我更改域類時,我失去了所有的引導數據,這基本上破壞了目的。我正在使用默認的h2數據庫。如何在開發中更改Grails域類時避免數據庫丟失

解決此問題的最佳方法是什麼?我是否必須像Postgres一樣去外部數據庫?

回答

6

默認DataSource.groovy在新創建的Grails 2的應用程序有

environments { 
    development { 
     dataSource { 
      dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', '' 
      url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000" 
     } 
    } 

create-drop該裝置的數據庫將從頭每當應用程序重新啓動重新創建。如果你想跨越重啓仍然存在一個數據庫,然後將其更改爲類似

dataSource { 
    dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', '' 
    url = "jdbc:h2:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000" 
} 

(即改變create-dropupdate並從url:mem)。但請注意,並非您可以對域類進行的所有更改都可以反映在update可應用的有限模式更改中。添加屬性應該沒問題,但刪除屬性或更改影響模式生成的約束可能會要求您無論如何都要刪除並重新創建數據庫(停止應用程序,刪除devDb文件並重新啓動它)。

+0

好的,謝謝。問題是當你修改例如一個Service類,該應用程序不需要重新啓動。但顯然修改一個Domain類強制某種重新啓動 - 足以丟棄數據庫,但不能再次運行Bootstrap。我猜如果我想維護創建 - 刪除行爲,我可以將邏輯從Bootstrap移動到另一個類,然後編寫腳本以便在重新啓動時通過事件等進行運行。 – Fletch

相關問題