我正在使用Spring Boot 2.0.1和liquibase-core-3.5.5
。
当我从IntelliJ运行应用程序(它将运行main()
方法)时,我在Liquibase数据库列database.filename
中看到以下类型的值:
db/changelog/changes/v0001.sql
如果我使用嵌入式Tomcat创建胖子并运行该应用程序,则数据库中将显示以下相同的变更集:
BOOT-INF/classes/db/changelog/changes/v0001.sql
我希望这些值匹配,以便我可以将应用程序作为JAR文件运行,但是如果需要调试,可以从IntelliJ连接到远程数据库。 (注意:这将用于测试数据库,我不会以这种方式调试生产)。
我找到了对
logicalFilePath
的引用(例如this SO question),但是我不相信这会提供我所需要的。我还尝试调试到Liquibase代码中,以确定是否可以更改此值。我最接近的是以下两个观察结果:
如果有办法使它们保持一致,或者可能只是将
filename
列更改为实际的文件名(例如v0001.sql
),那将是最好的。更新
我在Spring Boot中具有如下Liquibase设置:
我的
resources/db/changelog/db.changelog-master.yaml
文件具有以下内容:databaseChangeLog:
- includeAll:
path: db/changelog/changes/
然后在
resources/db/changelog/changes
中,我具有包含我要运行的SQL的单个*.sql
文件。我不记得在哪里找到此设置,但是我没有针对“变更集”的任何特定信息,这是我的错误吗? 最佳答案
通过不再使用includeAll
文件中的db.changelog-master.yaml
选项,我可以使用它。 includeAll
选项是快速入门(并处理特定目录中的所有文件)的有用方法,但是对于常规使用而言,似乎不建议这样做。如所提到的here。
这是我以前在db.changelog-master.yaml
中拥有的功能,不要以这种方式使用它。
databaseChangeLog:
- includeAll:
path: db/changelog/changes/
这就是我将其更新为:
databaseChangeLog:
- include:
file: db/changelog/changes/v0001_users.sql
- include:
file: db/changelog/changes/v0002_accounts.sql
需要注意的重要一点是,我按照要运行的顺序专门列出了要包含的每个文件。这有点麻烦,但是值得进行更改。
在原始版本中,
databasechangelog.filename
列会根据应用程序的执行方式而有所不同:db/changelog/changes/v0001_users.sql
是从IntelliJ BOOT-INF/classes/db/changelog/changes/v0001_users.sql
是从可执行jar运行时该列的显示方式。 进行更改后,以上两个选项都相同,并且不再包含
BOOT-INF/classes/
作为前缀。多亏了其他帮助我指出正确方向的答案!
关于spring-boot - 如何更改Spring Boot和Liquibase的databasechangelog.filename?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51331751/