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