根据官方 Grails 文档,建议不要在生产环境中指定 dbCreate 属性。那么,在这种情况下会发生什么?Grails 会在最初将生产环境文件加载到容器(例如 Tomcat)上时执行任何操作,例如验证吗?如果验证完成,与 dbCreate="validate" 有什么区别?或者干脆什么都不做,让开发人员来确保域类和数据库模式之间的映射是正确的?先感谢您。
3 回答
如果dbCreate
未指定,设置为空字符串 ( dbCreate = ""
),或者设置为除创建、创建删除、更新或验证之外的任何内容,则什么都不会发生。不会创建、验证或更新数据库。
在 doc中,您可以使用 create、create-drop、update 或 validate,以及“任何其他值 - 什么都不做”。它还说“您也可以完全删除 dbCreate 设置,一旦您的架构相对稳定并且绝对是当您的应用程序和数据库部署在生产中时,建议您这样做。然后通过适当的迁移(使用 SQL 脚本或迁移)管理数据库更改像 Liquibase 这样的工具(数据库迁移插件使用 Liquibase 并与 Grails 和 GORM 紧密集成)。”
保持dbCreate
空白是一个非常糟糕的主意:配置与各个插件的配置合并,如果配置系统决定您没有设置dbCreate
属性并决定使用随机插件提供的值,则不会发生任何好事。如果该插件drop-create
在您的多 GB(甚至生产)数据库上订购了一个怎么办?
虽然接受的答案仍然是正确的并且问题没有标记特定版本,但我必须指出,自 grails 2 以来 grails文档已经发生了一些变化:
一旦您的架构相对稳定并且当您的应用程序和数据库部署在生产环境中时,建议将 dbCreate 设置设置为“无” 。然后通过适当的迁移来管理数据库更改,可以使用 SQL 脚本或 Flyway 或 Liquibase 等迁移工具。数据库迁移插件使用 Liquibase。