如何将 liquibase 配置为使用 table DATABASECHANGELOG 上文件名列的相对路径?

How do I configure liquibase to use relative path for the filename column on table DATABASECHANGELOG?

我使用的是 liquibase 3.4 版

执行 liquibase 变更集后,我在变更日志中看到以下条目

INSERT INTO DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE) VALUES ('1561715333', 'userx', 'C:/TeamCity.BuildAgent/work/CMSLiquibase/src/main/resources/releases/1/core/ddl/JIRA-1000-ADD_COLUMN.xml', SYSTIMESTAMP, 17, '7:762a7c8960445ef94da88c10a81acd79', 'addColumn', 'Adding column', 'EXECUTED', NULL, NULL, '3.4.0');

对于文件名,liquibase 生成完整路径 "C:/TeamCity.BuildAgent/work/CMSLiquibase/src/main/resources/releases/1/core/ddl/JIRA-1000-ADD_COLUMN.xml" 而我想要的是相对路径 "src/main/resources/releases/1/core/ddl/JIRA-1000-ADD_COLUMN.xml"

liquibase 文档说文件名应该是 "Path to the changelog. This may be an absolute path or a relative path depending on how the changelog was passed to Liquibase. For best results, it should be a relative path"

但是我找不到任何代码示例来说明它的配置位置。

知道我可以在哪里配置它吗?

您可以在 <databaseChangeLog> 标签中使用属性 logicalFilePath

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd"

    logicalFilePath="my_changelog.xml"> <<<<HERE

    ....
</databaseChangeLog>

不幸的是,没有全局设置可以做到这一点。您需要注意为您拥有的每个变更日志文件执行此操作。

注意

如果您已经 运行 更改了现有的更改日志,则需要更改数据库中的值! Liquibase 通过 filename、author 和 id 的组合来检测变更集。因此,如果您为已经 运行 的内容更改 logicalFilePath,Liquibase 会认为这是一个新的更改日志,并会再次尝试 运行 文件中的所有变更集。