我正在尝试解决Grails 2.5.x应用程序中的一个非常具体的要求:我想在应用程序启动之前通过应用一系列数据库转换脚本来升级数据库架构(取决于数据库版本/应用程序)版)。我们过去在一个“传统的”Java Servlet应用程序中做过这个,但是我在Grails中苦苦挣扎。
问题:在Grails中有一个事件,我可以在应用启动期间以某种方式挂钩,这将允许我使用Groovy和现有的DataSource配置,但是会在GORM / Hibernate之前发生开始了?
我已经检查了一些选项:
答案 0 :(得分:0)
虽然我还没有找到一种方法在GORM启动之前挂钩Grails启动(并执行数据库验证或创建),但有一种方法可以通过BootStrap init执行自定义数据库迁移代码,只需禁用所有Hibernate的hbm2ddl(只省略任何有效的dbCreate值)。
对于我们的项目,我们最终使用数据库迁移插件,但我很快意识到要使其正常工作,您还必须禁用hhm2ddl。如果使用validate
选项,GORM将在数据库迁移发生之前尝试验证数据库,并且应用程序将无法启动。
因此,如果想要提供数据库升级/迁移代码的自定义实现,则可以使用相同的方法 - 禁用hbm2ddl将允许它在不干扰hibernate的数据库模式验证的情况下运行。明显的缺点是无法再使用验证模式。