Как настроить liquibase, чтобы он не включал путь или имя файла для вычисления контрольной суммы?

Я обнаружил, что liquibase использует полный путь к файлу журнала изменений для вычисления контрольной суммы.

Это поведение ограничивает изменение имен файлов журнала изменений и пытается повторно применить наборы изменений после переименования файла.

Есть ли способ настроить liquibase для использования только идентификатора журнала изменений для расчета cuecksum?

Пожалуйста, поделитесь своими ценными мыслями.


person dharshan    schedule 10.11.2013    source источник


Ответы (4)


Используйте атрибут logicalFilePath тега databaseChangeLog.

person Jens    schedule 11.11.2013

Разработчики основной ветки рекомендуют использовать logicalFilePath и предлагать выполнять прямое обновление столбца DATABASECHANGELOG.FILENAME:

исправить неработающие записи с полными путями.

Если вы установите хэши с DATABASECHANGELOG.MD5SUM на null, это вызовет пересчет хэшей при следующем запуске LiquiBase. Это необходимо, так как алгоритм хеширования включает в результат и движущиеся части.

person gavenkoa    schedule 22.12.2015

Я столкнулся с той же проблемой и нашел решение ниже.

Если вы используете liquibase sql format, просто введите ниже в свой файл sql:

--liquibase formatted sql logicalFilePath:<relative SQL file path like(liquibase/changes.sql)>

Если вы используете liquibase xml format, просто введите ниже в свой xml-файл:

<databaseChangeLog logicalFilePath=relative XML file path like(liquibase/changes.xml)" ...>
...
</databaseChangeLog>

После добавления вышеуказанного атрибута logicalFilePath запустите команду liquibase update. Он поместит relative file path все, что вы поместите в logicalFilePath в FILENAME столбец таблицы DATABASECHANGELOG

person Ravirajsinh Vaghela    schedule 26.02.2019

Одна действительно похожая проблема: вы можете просто игнорировать часть пути перед файлом changelog-master.xml. В моем сценарии я разрегистрировал проект в C:\DEV\workspace, а мой коллега выписал проект в C:\another_folder\TheWorkspace.

Я бы рекомендовал прочитать http://forum.liquibase.org/topic/changeset-uniqueness-causing-issues-with-branched-releases-overlapped-changes-not-allowed-in-other-files первый.

Как и другие, вам нужно установить свойство logicalFilePath для элемента <databaseChangeLog>.

Вам также нужно будет определенным образом указать свойство changeLogFile при вызове liquibase. Я вызываю его из командной строки. Если вы укажете абсолютный или относительный путь к changeLogFile без пути к классам, как здесь, он будет включать весь путь в таблицу DATABASECHANGELOG:

liquibase.bat ^
--changeLogFile=C:\DEV\more\folders\schema\changelog-master.xml ^
...

тогда liquibase сломается, если вы переместите свои миграции в любую папку, кроме указанной выше. Чтобы исправить это (и убедиться, что другие разработчики могут использовать любое место рабочей области, которое они хотят), вам нужно сослаться на changelogFile из пути к классам:

liquibase.bat ^
--classpath=C:\DEV\more\folders ^
--changeLogFile=schema/changelog-master.xml ^
...

Во-первых, в моей таблице DATABASECHANGELOG были значения FILENAME (у меня может быть косая черта назад), например

C:\DEV\more\folders\schema\subfolder\script.sql

Во-вторых, моя таблица DATABASECHANGELOG имеет такие значения FILENAME, как

subfolder/script.sql

Меня вполне устраивают такие имена файлов. Каждый разработчик может запускать liquibase из любой папки. Если мы решим позже переименовать или переместить отдельный файл SQL, мы можем указать старое значение в свойстве logicalFilePath элемента <changeSet>.

Для справки, мой changelog-master.xml состоит только из таких элементов, как

<include file="subfolder/script.sql" relativeToChangelogFile="true"/>
person Patrick    schedule 11.08.2017