想通过 Liquibase 维护各个开发机 local 环境数据库结构的一致性,分别尝试了 maven plugin 和添加到 dependency 的方法。
不同工具 update 之后的 DATABASECHANGELOG.FILENAME
是不同的,比如用 mvn liquibase:update
得到 src/main/resources/db/changelog/changelog.sql
。
启动 Spring Boot 程序的时候 Liquibase 读到的 changelog 文件路径是 classpath:db/changelog/changelog.sql
,这两个路径差异会导致 liquibase.changelog.filter.ShouldRunChangeSetFilter#changeSetsMatch
方法返回 False ,让 Liquibase 认为这个 changeset 没有应用过,试图执行 SQL 语句创建表然后失败。
想问下一般生产实践都是怎么做的?禁止不同方法混用?
maven plugin 和 dependency 的版本都是 4.17.2 。
1
amet OP 还是没搜到什么好办法,写了个脚本在使用 CLI 的时候切一下工作目录,好歹是把相对路径对齐了
```zsh #!/bin/zsh # This script is used to run liquibase migrations on the local machine. WORK_DIR=src/main/resources cd $WORK_DIR liquibase --hub-mode=off \ --driver=com.mysql.cj.jdbc.Driver \ --classpath=$HOME/.m2/repository/com/mysql/mysql-connector-j/8.0.31/mysql-connector-j-8.0.31.jar \ --changeLogFile=db/changelog/changelog.mysql.sql \ --url=jdbc:mysql://localhost:3306/showcase \ --username=******** \ --password=********** \ $1 ``` |