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

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

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

Есть ли способ настроить Liquibase для использования только идентификатора изменения в вычислить кукуксум?

Просьба представить свои ценные мысли.

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Одна очень похожая проблема - вы можете просто игнорировать часть пути перед файлом 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-different-files.

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

Вам также необходимо указать свойство changeLogFile определенным образом при вызове linibase. Я вызываю это из командной строки. Если вы укажете абсолютный или относительный путь к 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>.

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

<include file="subfolder/script.sql" relativeToChangelogFile="true"/>