我正在将使用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}
答案 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>