Grails 2.0 的优点之一是您可以在开发中更改域类,而无需重新启动应用程序服务器。这可行,但是当我更改域类时,我会丢失所有引导数据,这基本上没有达到目的。我正在使用默认的 h2 数据库。
解决这个问题的最佳方法是什么?我必须去像 Postgres 这样的外部数据库吗?
Grails 2.0 的优点之一是您可以在开发中更改域类,而无需重新启动应用程序服务器。这可行,但是当我更改域类时,我会丢失所有引导数据,这基本上没有达到目的。我正在使用默认的 h2 数据库。
解决这个问题的最佳方法是什么?我必须去像 Postgres 这样的外部数据库吗?
新创建的 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
删除)。但是请注意,并非您对域类所做的所有更改都可以反映在可以应用的有限架构更改中。添加属性应该没问题,但删除属性或更改影响模式生成的约束可能需要您删除并重新创建数据库(停止应用程序,删除 devDb 文件并重新启动它)。:mem
url
update