无法在application.yaml中设置Liquibase的duplicateFileMode属性
解决Spring Boot中Liquibase duplicateFileMode配置不生效问题
问题描述
Java项目使用Liquibase做数据库迁移时,遇到错误:
Found 2 files with the path 'db/changelog/db.changelog-master.yaml'
官方给出两种解决方向:限制liquibase.searchPath搜索路径,或设置liquibase.duplicateFileMode=WARN。其中通过静态代码块设置System.setProperty("liquibase.duplicateFileMode", "WARN")可以正常生效,但在application.yaml中通过spring.liquibase.parameters配置(无论用duplicate-file-mode还是duplicateFileMode)都无法解决原错误。
问题原因
spring.liquibase.parameters的作用是传递Liquibase变更集的自定义参数(比如给changelog文件中的${xxx}占位符赋值),而liquibase.duplicateFileMode属于Liquibase的全局系统属性,这类属性不能通过parameters节点配置。
正确配置方式
方式1:通过spring.liquibase.properties配置
Spring Boot的Liquibase自动配置提供了spring.liquibase.properties节点,专门用来传递Liquibase原生系统属性,配置如下:
spring: liquibase: properties: duplicateFileMode: WARN
方式2:添加JVM启动参数
在项目启动时添加JVM参数,直接设置系统属性:
-Dliquibase.duplicateFileMode=WARN
方式3:保留静态代码块(已验证生效)
如果上述方式不适用,可继续使用已验证有效的静态代码块方式:
static { System.setProperty("liquibase.duplicateFileMode", "WARN"); }
内容的提问来源于stack exchange,提问作者Roman Sobo
相关产品推荐
相关产品推荐

