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

标签 grails grails-orm grails-domain-class grails-2.0

Grails 2.0 的优点之一是您可以在开发过程中更改域类,而无需重新启动应用程序服务器。这行得通,但是当我更改域类时,我丢失了所有 Bootstrap 数据,这基本上违背了目的。我正在使用默认的 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 并从 url 中删除 :mem)。但是请注意,并非您对域类所做的所有更改都可以反射(reflect)在 update 可以应用的有限架构更改中。添加属性应该没问题,但删除属性或更改影响架构生成的约束可能需要您删除并重新创建数据库(停止应用程序,删除 devDb 文件并重新启动)。

关于grails - 在开发中更改 Grails 域类时如何避免丢失数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12138815/

相关文章:

grails - 根据传递给 Controller ​​的参数动态创建查询

grails - 在grails中使用elasticsearch查询嵌套字段

json - 在 Grails 2.3.3 中接收复杂的 json 对象

javascript - Grails-如何通过onchange事件在gsp文件中调用js文件中的函数?

grails - groovy.lang.MissingPropertyException : No such property: configClass for class: java. lang.String

Grails:spring security 插件 - 错误 springsecurity.GormPersistentTokenRepository

multithreading - Grails 1.3.7- Multi-Tenancy 插件和多线程操作-线程无法访问租户

grails - 如何用Domain类的属性子集填充Cmd对象?

xml - Grails/Groovy - 将对象呈现/直接转换为 XML 以保存到文件

unit-testing - 在 grails 中重写域属性的 setter 是否正确?