首页 文章

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

提问于
浏览
0

我正在迁移一个使用Liquibase 3.4.1到Spring Boot 2.0.3的Spring应用程序 . 我还在使用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

    另一方面,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上看到前缀=“spring.liquibase”,在liquibase-core-3.5.3.jar上看到前缀=“liquibase” .

    现在来到你的意思 . 请查看yur 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}
    
  • 0

    我'm not sure exactly what I did, but now it'工作正常 . 我将更改日志值更改为change-log:classpath:liquibase / changelog / db.changelog-master.xml所以没有/在classpath之后我使用liquibase版本3.6.1,其中spring spring liquibase配置在前面有spring .

    我在master文件中导入了其他文件 . 虽然我正在调试,但是我发现不是将导入的文件与db中的ran变换集匹配,而是匹配主文件,因此它尝试重新运行变更集,但现在一切正常 . 奇怪的 .

  • 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>
    

相关问题