我正在使用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代码中,以确定是否可以更改此值。我最接近的是以下两个观察结果:
  • 将SQL文件的绝对文件路径修剪到其最终值here.
  • 可以保留的完整更改集here。而且,如果我在调试时更改了其中一个值,则可以看到它进入了数据库。

  • 如果有办法使它们保持一致,或者可能只是将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/

    10-10 02:38