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

时间:2012-08-27 08:49:15

标签: grails gorm grails-domain-class grails-2.0

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

解决这个问题的最佳方法是什么?我是否必须去像Postgres这样的外部数据库?

1 个答案:

答案 0 :(得分:6)

新创建的Grails 2应用中的默认DataSource.groovy

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