10

对于我们的应用程序,我们使用 liquibase。我们需要从命令行(在生产环境中手动)和在应用程序启动时(测试环境等)自动运行数据库迁移。

问题是 Liquibase 将整个文件名视为变更集标识的一部分,因此如果路径不同,它会尝试重新应用变更集。例如,在“完全限定路径”VS“相对路径”到 db-changelog 文件的情况下。

如何禁用 FILENAME 列检查?

4

3 回答 3

17

基于,方法如下:

始终在 databaseChangeLog 元素和每个 changeSet 元素上使用logicalFilePath 属性。

例子:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog logicalFilePath="does-not-matter" 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-2.0.xsd">

    <changeSet logicalFilePath="path-independent" author="authorId" id="1">
        ...
    </changeSet>

</databaseChangeLog>

结果,所有变更集的 FILENAME 列将包含“路径无关”,并且将省略检查。

于 2013-11-13T16:55:22.920 回答
3

@snowindy 的回答很好。或者,您始终可以以类路径相关的方式引用您的更改日志,例如 com/example/changelog.xml。如果您在两种环境中正确配置类路径,则可以使用相同的“com/example/changelog.xml”。

于 2013-11-13T18:45:16.117 回答
1

还有另一个因素在起作用。有不同的方法来引用changeLogFile(绝对/相对路径或通过类路径)。我在这里详细写了它:https ://stackoverflow.com/a/45644695/4176104

于 2017-08-11T22:42:15.897 回答