如何配置liquibase以使用表DATABASECHANGELOG上文件名列的相对路径?

时间:2019-07-15 05:04:48

标签: liquibase

我正在使用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文档说“文件名”应该是“更改日志的路径。根据更改日志传递到Liquibase的方式,它可以是绝对路径或相对路径。为达到最佳效果,应将其作为相对路径”

但是我找不到有关此配置位置的任何代码示例。

有什么想法可以在这里配置吗?

1 个答案:

答案 0 :(得分:2)

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

<?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使用文件名,作者和ID组合检测变更集。因此,如果将logicalFilePath更改为已经运行的内容,Liquibase会认为这是一个新的更改日志,并将尝试再次运行文件中的所有更改集。