#spring #spring-boot #hibernate #liquibase
#spring #spring-boot #спящий режим #liquibase
Вопрос:
Через некоторое время я хотел бы оптимизировать changelog
использование в своем Spring-Boot
приложении. Я использую SQL
синтаксис в своих файлах liquibase.
Я обновил некоторые старые sqll (без изменения имени набора изменений). И теперь я получил:
Caused by: liquibase.exception.ValidationFailedException: Validation Failed:
37 change sets check sum
classpath:db/changelog/db.changelog-master.sql::4::siewer was: 8:8560502cf93e550076df8a7dc82a45b6 but is now: 8:543d80fbaa5a5b468e56ac6ef4705e58
Возможно ли изменить старое changesets
и обновить hashes
без выполнения миграции? Я бы хотел, чтобы уже используемые базы данных работали без изменений (но чтобы иметь возможность получать новые миграции). В этот момент, когда я запускаю приложение со свежей базой данных, все в порядке, но когда я хочу запустить приложение в уже заполненной базе данных, я получаю ошибки.
Какие-нибудь советы? Возможно ли это сделать?
Ответ №1:
Вы можете запускать свои сценарии миграции для чистой базы данных, копировать хэши (или копировать их непосредственно из журнала ошибок один за другим) и обновлять хэш непосредственно в таблице liquibase. Просто убедитесь, что он обновляется вместе с развертыванием новых наборов изменений, иначе приложение не запустится.
Ответ №2:
Да, это возможно. Вы можете использовать <validCheckSum>
для этого. Это сообщит liquibase, какова на самом деле контрольная сумма для этого набора изменений.
Итак:
<changeSet id="foo" author="bar">
<validCheckSum>your_checksum_here</validCheckSum>
<!-- changeSet logic here -->
</changeSet>
Или, если вас вообще не волнует контрольная сумма набора изменений, вы можете использовать ANY
вместо фактической контрольной суммы:
<changeSet id="foo" author="bar">
<validCheckSum>ANY</validCheckSum>
<!-- changeSet logic here -->
</changeSet>
И некоторая философия по этому поводу:
Вы не должны изменять существующие наборы изменений. Если вам нужно внести изменения в схему вашей базы данных, вам следует написать новые наборы изменений в дополнение к старым.