首页 文章

如何修改Spring Boot和Liquibase的databasechangelog.filename?

提问于
浏览
3

我正在使用Spring Boot 2.0.1和 liquibase-core-3.5.5 .

当我从IntelliJ运行应用程序(将运行 main() 方法)时,我在Liquibase数据库列 database.filename 中看到以下类型的值:

db/changelog/changes/v0001.sql

如果我使用嵌入式Tomcat创建一个胖jar并运行该应用程序,则相同的变更集将在数据库中显示为:

BOOT-INF/classes/db/changelog/changes/v0001.sql

我希望这些值匹配,以便我可以将我的应用程序作为JAR文件运行,但如果需要调试则从IntelliJ连接到远程数据库 . (注意:这将是一个测试数据库,我不会以这种方式调试 生产环境 ) .

我找到了对 logicalFilePath 的引用(例如this SO question),但我不相信这会提供我需要的东西 .

我也尝试调试Liquibase代码以确定是否有一种方法可以改变这个值 . 我最接近的是这两个观察结果:

  • 将SQL文件的绝对文件路径修剪为其最终值here.

  • 持有的完整更改集可用here . 如果我改变其中一个值(在调试时),我可以看到它进入数据库 .

如果有办法使这些一致,或者可能只是将 filename 列更改为实际文件名(例如 v0001.sql ),那将是最好的 .

UPDATE

我在Spring Boot中将Liquibase设置如下:

我的 resources/db/changelog/db.changelog-master.yaml 文件包含以下内容:

databaseChangeLog:
    - includeAll:
        path: db/changelog/changes/

然后在 resources/db/changelog/changes 我有单独的 *.sql 文件,其中包含我想要运行的SQL . 我不记得我在哪里找到了这个设置,但我没有具体的"changesets",这对我来说是个错误吗?

3 回答

  • 1

    logicalFilePath 属性正是您想要的 . 我的项目遇到了同样的问题,我用maven执行了一些部件,有些部件用spring-boot执行 . this question也可以帮到你 .

  • 1

    在每个变更集上设置 logicalFilePath . 这将确保 DATABASECHANGELOG.FILENAME 列保持一致,并且不依赖于变更集文件as explained in this post的物理结帐目录 .

  • 1

    我能够通过不再使用 db.changelog-master.yaml 文件中的 includeAll 选项来使用它 . includeAll 选项是一种快速入门(并处理特定目录中的所有文件)的有用方法,但对于常规使用来说似乎是不可取的 . 如上所述here .

    这就是我之前在 db.changelog-master.yamldon't use it this way 中所拥有的 .

    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/ 作为前缀 .

    感谢其他答案帮助我指明正确的方向!

相关问题