2012-08-27 56 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

相关问题