Liquibase重置校验和并在迁移到Spring Boot 2时尝试重新运行变更集

时间:2018-07-02 15:34:43

标签: spring-boot liquibase

我正在将使用Liquibase 3.4.1的Spring应用程序迁移到Spring Boot 2.0.3。我仍在使用Liquibase 3.4.1,尽管我也尝试过3.6.1。

我在application.yml中添加了liquibase配置部分,但是当我启动应用程序时,对于现有更改集, DATABASECHANGELOG 中的 MD5SUM 列设置为null,并且应用程序尝试重新运行变更集,但失败。

我添加了一个新的变更集进行测试,并为其设置了 MD5SUM 值,但是列 LIQUIBASE 的值为 UNKNOWN 而不是 3.4.1

我在日志中看不到任何相关内容。我也尝试过在调试模式下运行该应用程序。

有人可以帮我一些有关我可以尝试的建议吗?该应用程序可以在没有Spring Boot的情况下与Liquibase 3.4.1正常工作。

下面是我的相关application.yml配置:

spring:
  datasource:
    url: ${RDS_URL}
    username: ${RDS_USERNAME}
    password: ${RDS_PASSWORD}
  jpa:
    show-sql: ${HIBERNATE_SHOW_SQL}
    hibernate:
      ddl-auto: none
    properties:
      generate_statistics: true
      globally_quoted_identifiers: true
      format_sql: ${HIBERNATE_FORMAT_SQL}
  liquibase:
    enabled: true
    change-log: classpath:/liquibase/changelog/db.changelog-master.xml
    user: ${RDS_USERNAME}
    password: ${RDS_PASSWORD}
    url: ${RDS_URL}

3 个答案:

答案 0 :(得分:0)

Spring 1.5.X使用liquibase-core-3.5.3.jar,而2.0.X使用liquibase-core-3.5.5.jar。

liquibase代码不同。如果您查看LiquibaseProperties.java,则会在liquibase-core-3.5.5.jar上看到prefix =“ spring.liquibase”,而在liquibase-core-3.5.3.jar上则看到prefix =“ liquibase”。

现在说清楚了。请查看您的liquibase版本,并相应地使用前缀。如果使用旧版本,请从liquibase中删除spring。

spring:
  datasource:
    url: ${RDS_URL}
    username: ${RDS_USERNAME}
    password: ${RDS_PASSWORD}
  jpa:
   show-sql: ${HIBERNATE_SHOW_SQL}
   hibernate:
     ddl-auto: none
  properties:
     generate_statistics: true
     globally_quoted_identifiers: true
     format_sql: ${HIBERNATE_FORMAT_SQL}

liquibase:
    enabled: true
    change-log: classpath:/liquibase/changelog/db.changelog-master.xml
    user: ${RDS_USERNAME}
    password: ${RDS_PASSWORD}
    url: ${RDS_URL}

答案 1 :(得分:0)

我不确定我到底做了什么,但是现在一切正常。我将更改日志值更改为更改日志:classpath:liquibase / changelog / db.changelog-master.xml ,所以在类路径后没有 / ,我正在使用liquibase版本3.6.1,带有spring boot liquibase配置,其前面带有 spring

我在主文件中已导入到其他文件。当我调试时,我看到不是将导入的文件与数据库中运行的变更集匹配,而是与主文件匹配,因此它尝试重新运行变更集,但是现在一切正常。很奇怪。

答案 2 :(得分:0)

您可以在脚本上使用<preConditions>以确保应执行脚本,否则可以将更改集记录为MARK_RAN

这是前提条件的一个例子:

<changeSet ...................>

    <preConditions onFail="MARK_RAN" onError="CONTINUE">
        <not>
            <tableExists tableName="table_name_exemple"/>
        </not>
    </preConditions>

    <createTable tableName="table_name_exemple">

    </createTable>
</changeSet>