0

我正在使用 Grails数据库迁移插件

这是我的配置:

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

任何想法为什么?

4

1 回答 1

3

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

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

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

于 2013-08-19T21:08:57.487 回答