首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >升级到grails 3之后的grails数据库迁移插件问题

升级到grails 3之后的grails数据库迁移插件问题
EN

Stack Overflow用户
提问于 2016-03-21 02:54:46
回答 1查看 805关注 0票数 1

我使用了一个以前的版本grails-数据库迁移插件一段时间,并没有什么大的问题。但是,最近我将整个项目升级为grails3.0.9,并进行了一些额外的开发,如下所示:

  1. 将当前prod DB结构导入本地计算机(该DB副本没有最新更改和新实体)
  2. 执行:grails -Dgrails.env=staging dbm-gorm-diff changlog.xml

在这一点上,我期望的是新的changlog.xml文件,包括现有实体和新实体的所有更改。

我得到的是:

  • 新定义的实体自动添加到DB中。
  • changlog.xml中的更改仅包括已经存在的表的更改,如:

另外,如果我尝试运行grails -Dgrails.env=staging run-app

错误--应用程序启动失败的org.springframework.beans.factory.BeanCreationException:错误创建名为‘springLiquibase_dataSource’的bean :调用init方法失败;嵌套的异常是java.lang.NoSuchMethodError: liquibase.integration.spring.SpringLiquibase.createDatabase(Ljava/sql/Connection;Lliquibase/resource/ResourceAccessor;)Lliquibase/database/Database;FAILURE: Build和一个异常。

  • 哪里出了问题:执行失败的任务‘:引导’。进程的命令'/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/bin/java'‘以非零出口值1完成.

..。

  • 尝试:使用--stacktrace选项运行以获得堆栈跟踪。使用--info或-调试选项运行以获得更多日志输出。启动服务器失败(使用--堆栈跟踪查看完整跟踪)

这是我的application.yml的一部分

代码语言:javascript
复制
dataSource:
    pooled: true
    url: jdbc:mysql://127.0.0.1:3306/triz?useUnicode=yes&characterEncoding=UTF-8
    driverClassName: "com.mysql.jdbc.Driver"
    jmxExport: true
    username: root
    password: password
    dialect: org.hibernate.dialect.MySQL5InnoDBDialect
    properties:
        jmxEnabled: true
        initialSize: 5
        maxActive: 50
        minIdle: 5
        maxIdle: 25
        maxWait: 10000
        maxAge: 600000
        timeBetweenEvictionRunsMillis: 5000
        minEvictableIdleTimeMillis: 60000
        validationQuery: SELECT 1
        validationQueryTimeout: 3
        validationInterval: 15000
        testOnBorrow: true
        testWhileIdle: true
        testOnReturn: false
        jdbcInterceptors: ConnectionState
        defaultTransactionIsolation: 2

environments:
    development:
        dataSource:
            dbCreate: create
#            url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
    test:
        dataSource:
            dbCreate: update
            url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
    staging:
        dataSource:
            url: jdbc:mysql://127.0.0.1:3306/triz_staging?useUnicode=yes&characterEncoding=UTF-8

和gradle.build

代码语言:javascript
复制
buildscript {
    ext {
        grailsVersion = project.grailsVersion
    }
    repositories {
        mavenCentral()
        mavenLocal()
        maven { url "https://repo.grails.org/grails/core" }
    }
    dependencies {
        classpath "org.grails:grails-gradle-plugin:$grailsVersion"
        classpath 'com.bertramlabs.plugins:asset-pipeline-gradle:2.5.0'
//        classpath 'com.bertramlabs.plugins:less-asset-pipeline:2.6.7'
        classpath "org.grails.plugins:hibernate:4.3.10.5"
        classpath 'org.grails.plugins:database-migration:2.0.0.RC4'
    }
}
...
...
dependencies {
 ...
    compile 'org.liquibase:liquibase-core:3.3.2'
    runtime 'org.grails.plugins:database-migration:2.0.0.RC4'
}

UPDATE我有另一种方法来解决这个问题:我的计划是根据我当前的prod生成一个变更日志,然后为我所做的更改生成一个差异。听起来很简单,很简单;但是,结果并不像预期的那样。以下是我所做的:

  1. 倾弃prod DB
  2. 移除液基表
  3. 运行:grails dbm-generate-changelog changelog-init.xml --add在这里,我期望changelog-init.xml包含DB的当前状态。但是,相反,它首先应用了基于我的模型的更改,然后尝试生成差异。最后,我得到了一个变更日志,包括我现有的整个DB,其中包含了从gorm应用的更改。

我在这里做错什么了?

附加观测

看起来,每当我尝试运行任何与迁移相关的命令时,grails都会应用之前的所有更改,即使是通过我的config命令:

代码语言:javascript
复制
staging:
        dataSource:
            dbCreate: ~
            url: jdbc:mysql://127.0.0.1:3306/triz_staging?useUnicode=yes&characterEncoding=UTF-8
            properties:
                jmxEnabled: true

还试着完全去除dbCreate。没有改变什么..。我完了,不知道下一步要搬到哪里去!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-21 08:36:34

好吧这里有个交易..。我不确定这是否是真正的原因,但我所做的只是将数据源配置从application.yml迁移到application.groovy,一切都恢复了正常。

我很乐意听到你的想法。

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36122430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档