Как определить необязательный набор изменений в Liquibase? - PullRequest
0 голосов
/ 11 октября 2018

Мы используем Liquibase в качестве инструмента рефакторинга базы данных в облачном сервисе и теперь хотели бы использовать его для некоторой облегченной миграции данных, которая будет реализована как CustomTaskChange и займет всего несколько секунд.Эту миграцию данных «приятно иметь», но она ни в коем случае не обязательна для правильной работы службы - если по какой-то причине происходит сбой, набор изменений следует просто пропустить, служба, тем не менее, запущена, и набор изменений повторяется во времяследующий перезапуск сервиса, пока он, наконец, не получится.Таким образом, ошибки при выполнении набора изменений следует игнорировать, но набор, помеченный как запущенный, только после того, как он действительно был успешно выполнен один раз.

Интересно, как мы могли бы реализовать такой тип поведения, используя Liquibase: атрибут <changeSet> failOnError="false" продолжается в случае ошибки, но согласно документации и ответу , предоставленному Натаном Воксландом здесь в StackOverflow, он всегда помечает набор изменений как запущенный - следовательно, Liquibase не будет пытаться выполнить его при следующем запускеслужбы.Атрибут <preConditions> onFail, по-видимому, касается только невыполнения предварительных условий, поэтому запуск все равно завершится неудачей в случае ошибки при установке onFail, скажем, CONTINUE.

Есть ли какая-либо другая опция?/ атрибут, который мы пропустили или рекомендуемый способ решения такой ситуации?

1 Ответ

0 голосов
/ 11 октября 2018

Вы можете достичь поведения «повторять до успешного», если реализуете дополнительную миграцию данных внутри кода пользовательского предварительного условия .Затем вы можете настроить onFail этого предварительного условия на CONTINUE, что даст вам желаемое поведение ( source ):

CONTINUE - пропустить набор изменений.Выполнение набора изменений будет повторено при следующем обновлении.Перейдите к журналу изменений.

Я не совсем уверен, технически возможна ли реализация миграции в коде предварительного условия - потому что она, конечно, не предназначена для таких вещей.Также вы можете захотеть убедиться, что пользовательское предварительное условие не выполняется снова после того, как набор исправлений был помечен как выполненный.

...