在开发中更改Grails域类时如何避免数据库丢失

在开发中更改Grails域类时如何避免数据库丢失,grails,gorm,grails-domain-class,grails-2.0,Grails,Gorm,Grails Domain Class,Grails 2.0,Grails2.0的优点之一是,您可以在开发中更改域类,而无需重新启动应用程序服务器。但是,当我更改域类时,我会丢失所有引导数据,这基本上违背了目的。我使用的是默认的h2数据库 最好的办法是什么?我是否必须转到像Postgres这样的外部数据库?新创建的Grails 2应用程序中默认的数据源 environments { development { dataSource { dbCreate = "create-drop" // one of 'c

Grails2.0的优点之一是,您可以在开发中更改域类,而无需重新启动应用程序服务器。但是,当我更改域类时,我会丢失所有引导数据,这基本上违背了目的。我使用的是默认的h2数据库


最好的办法是什么?我是否必须转到像Postgres这样的外部数据库?

新创建的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 drop
更改为
update
,并从
url
中删除
:mem
)。但是请注意,并不是所有可以对域类进行的更改都可以反映在
update
可以应用的有限模式更改中。添加属性应该可以,但是删除属性或更改影响架构生成的约束可能需要您删除并重新创建数据库(停止应用程序,删除devDb文件,然后重新启动)。

确定,谢谢。问题是,当您修改例如服务类时,应用程序不需要重新启动。但显然,修改域类会强制进行某种重新启动—足以删除数据库,但不会再次运行引导。我想如果我想保持createdrop行为,我可以将逻辑从引导转移到另一个类,然后编写脚本,通过事件等重新启动时运行。