Grails 3 数据库迁移插件初始化错误

Posted

技术标签:

【中文标题】Grails 3 数据库迁移插件初始化错误【英文标题】:Grails 3 database-migration-plugin initialization error 【发布时间】:2016-05-10 00:36:52 【问题描述】:

我最近将 database-migration-plugin 添加到了我的 grails 3.0.11 应用程序中。问题是当我尝试运行应用程序时出现以下错误:

ERROR grails.boot.GrailsApp - Application startup failed
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'springLiquibase_dataSource': 
Invocation of init method failed; nested exception is liquibase.exception.ChangeLogParseException: 
java.lang.IllegalArgumentException: Script text to compile cannot be null!

看起来它在我的 grails-app/migrations 文件夹中找不到 changelog.xml。我的 build.gradle 文件包含:

buildscript 
    dependencies 
        classpath "org.grails.plugins:database-migration:2.0.0.RC1"
    

sourceSets 
    main 
        resources 
            srcDir 'grails-app/migrations'
        
    

我还在 application.groovy 文件中添加了以下几行:

grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.xml']

非常感谢任何关于如何使数据库迁移插件正常工作的建议。

编辑:

我使用$grails dbm-create-changelog 命令创建了changelog.xml 文件

我还添加到 build.gradle(如$grails plugin-info database-migration 命令所建议的那样):

dependencies 
    compile "org.grails.plugins:database-migration:2.0.0.RC1"

然后我将其更改为(按照官方文档):

dependencies 
    runtime "org.grails.plugins:database-migration:2.0.0.RC1"

然后(按照启动错误手册的建议)我强制使用 liquibase:

dependencies 
    compile 'org.liquibase:liquibase-core:3.3.2'
    runtime 'org.grails.plugins:database-migration:2.0.0.RC1'

dependencies 
    compile 'org.liquibase:liquibase-core:3.3.2'
    compile 'org.grails.plugins:database-migration:2.0.0.RC1'

问题依旧:java.lang.IllegalArgumentException: Script text to compile cannot be null!

【问题讨论】:

【参考方案1】:

我们在升级到 Grails 3 时遇到了同样的问题。

查看grails-database-migration插件的代码可以清楚地看到配置参数从列表updateOnStartFileNames更改为单个值updateOnStartFileName

所以当你改变你的配置时

grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.xml']

grails.plugin.databasemigration.updateOnStartFileName = 'changelog.xml'

它应该会再次工作。

【讨论】:

【参考方案2】:

我遇到了类似的错误。在我的例子中,我们有一些查找表,我们使用手工制作的脚本填充其中,该脚本包含在主 changelog.groovy 中,例如:

include file: 'data/001-tablex-data.groovy'

除了文件名不正确 - 它应该是 002-... 而不是。错误基本相同,但是没有报告表明没有找到/解析哪个包含的文件,这很痛苦。因此,如果您手动包含了文件,那么除了检查*** changelog.groovy 或 changelog.xml 之外,还要查找名称不正确的文件

【讨论】:

这是正确的答案,问题源于找不到导入文件之一,它可以是其中之一,甚至是更新文件名(changelog.xml 或 changelog.groovy)跨度> 【参考方案3】:

好的,我终于找到了解决方案。也许有一天它会帮助某人。所以我所做的只是删除 changelog.groovy(我从 XML 切换到 Groovy)文件。然后我用$grails dbm-create-changelog changelog.groovycommand 生成了一个新的。作为最后一步,我运行$grails dbm-changelog-sync,一切都开始正常工作了。

【讨论】:

这不是真正问题的解决方案。通过确保使用默认的更改日志脚本名称,您已经解决了这个问题。我的回答解决了问题【参考方案4】:

我也遇到过这个问题,就我而言,问题是build.gradoe中那个块的顺序

sourceSets 
    main 
        resources 
            srcDir 'grails-app/migrations'
        
    

必须bootRun 之前,如以下代码。

sourceSets 
    main 
        resources 
            srcDir 'grails-app/migrations'
        
    


bootRun 
    jvmArgs(
            '-Dspring.output.ansi.enabled=always',
            '-noverify',
            '-XX:TieredStopAtLevel=1',
            '-Xmx1024m')
    sourceResources sourceSets.main
    String springProfilesActive = 'spring.profiles.active'
    systemProperty springProfilesActive, System.getProperty(springProfilesActive)

如果您将sourceSets 放在bootRun 之后,您的应用程序将找不到迁移文件。

【讨论】:

【参考方案5】:

确保:

    您已设置更新日志,即文件grails-app/migrations/changelog.xml 存在且有效。

您如何执行此操作取决于您的情况。该插件的文档中有一节介绍了如何最初创建文件。

    您的数据源设置为使用changelog.xml 适用的数据库。

【讨论】:

嗨!谢谢你的回答。 Jet 它不是一个解决方案。我忘记在问题描述中添加我的运行时依赖项。我相应地编辑了我的问题。【参考方案6】:

我们遇到此问题的另一个潜在原因是大小写不正确。如果 changelog.groovy 引用 path/someFile.groovy 但实际名称是 path/somefile.groovy 那么您将收到此错误。确保路径名大小写匹配。

【讨论】:

以上是关于Grails 3 数据库迁移插件初始化错误的主要内容,如果未能解决你的问题,请参考以下文章

grails4中的数据库迁移插件错误

带有数据库迁移插件的 Grails 3:类 [com.mypackage.security.RequestMap] 上的方法在 Grails 应用程序之外使用

Grails 数据库迁移插件

Grails 数据库迁移插件 updateOnStart 不起作用

Grails 数据库迁移插件问题

在 grails 中迁移 mongodb 插件时发生异常