【问题标题】:Grails database migration fails with LiquibaseExceptionGrails 数据库迁移失败并出现 LiquibaseException
【发布时间】:2013-08-21 19:15:49
【问题描述】:

我正在使用 Grails database migration plugin

这是我的配置:

grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = 'changelog.groovy'

当我启动我的应用程序时,我得到了这个异常:

| Error 2013-08-20 08:55:47,356 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: liquibase.exception.LiquibaseException: Cannot find parser that supports c
Message: liquibase.exception.LiquibaseException: Cannot find parser that supports c
    Line | Method
->>  334 | innerRun  in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    166 | run       in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    724 | run . . . in java.lang.Thread

Caused by LiquibaseException: Cannot find parser that supports c
->>   61 | getParser in liquibase.parser.ChangeLogParserFactory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    623 | listUnrunChangeSets in liquibase.Liquibase
|     67 | doCall .  in grails.plugin.databasemigration.MigrationRunner$_autoRun_closure1
|    132 | executeInSession in grails.plugin.databasemigration.MigrationUtils
|     56 | autoRun . in grails.plugin.databasemigration.MigrationRunner
|     96 | doCall    in DatabaseMigrationGrailsPlugin$_closure2
|    334 | innerRun  in java.util.concurrent.FutureTask$Sync
|    166 | run       in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    724 | run . . . in java.lang.Thread

有什么想法吗?

【问题讨论】:

    标签: grails database-migration liquibase


    【解决方案1】:

    问题是updateOnStartFileNames属性接受一个数组,而不是字符串,所以配置应该是

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

    插件迭代这个列表依次执行每个,但是当给定一个字符串时,它迭代每个字符并执行它。然后 Liquibase 抛出异常,因为它无法识别第一个字母的后缀,在本例中为“c”。

    【讨论】:

      猜你喜欢
      • 2013-01-07
      • 2014-08-02
      • 1970-01-01
      • 2017-01-08
      • 2011-05-22
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2021-11-24
      相关资源
      最近更新 更多