Статьи

Выполнение Liquibase: 3 варианта использования

Как только вы создали  файл журнала изменений базы данных , как лучше всего его запустить? Как всегда, это зависит от того, что работает лучше для вас. Существует три основных способа запуска Liquibase: «автоматически при запуске», «вручную при необходимости» или «просто дайте мне SQL, и я сделаю это сам». Все три работают с любым файлом журнала изменений, поэтому используйте метод (или комбинацию методов), который лучше всего подходит для вашего проекта.

Автоматическое развертывание

Самый простой способ запустить Liquibase — настроить его автоматический запуск при запуске. После настройки состояние вашей базы данных всегда соответствует ожидаемому коду, и вы не можете забыть ручные действия. Этот метод лучше всего работает в средах, где у вас меньше контроля над процессом развертывания или если вы хотите более простой процесс развертывания. 

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

Не беспокойтесь, если у вас несколько серверов, указывающих на одну и ту же базу данных. Liquibase использует таблицу DATABASECHANGELOGLOCK для обеспечения одновременной работы только одного экземпляра Liquibase. Даже если у вас есть кластер серверов, подключенных к сети в одно и то же время, и все они автоматически запускают Liquibase, таблица блокировок гарантирует, что они не будут пытаться обновлять базу данных одновременно и вызывать проблемы.

Liquibase поставляется с двумя хуками для автоматического обновления вашей базы данных при запуске: слушателем сервлета  и бином  Spring .

Если ни один из этих хуков не подходит для вашего приложения, вы всегда можете напрямую вызвать Java API Liquibase. Самый простой способ запуска Liquibase напрямую выглядит так:

java.sql.Connection connection = openConnection(); //your openConnection logic here

Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection))

Liquibase liquibase = new liquibase.Liquibase("path/to/changelog.xml", new ClassLoaderResourceAccessor(), database);

liquibase.update(new Contexts(), new LabelExpression());

Этот код создаст экземпляр фасада liquibase.Liquibase и запустит метод update (), который просто обновляет базу данных, чтобы соответствовать переданному журналу изменений. Есть много других методов на фасаде Liquibase, которые также можно использовать, если вы хотите автоматизировать Liquibase различными способами.

Развертывание вручную

Если автоматическое обновление базы данных не работает для вас, вы можете выполнить Liquibase по требованию. Liquibase поставляется с приложением командной строки,  которое поддерживает как Windows, так и Linux. Он также поставляется с заданием Ant  и целью Maven  для тех, кто использует эти инструменты. Эти интерфейсы позволяют выполнять команды Liquibase в любое время, не привязываясь к запуску приложения.

Одним из распространенных применений интерфейса Ant и / или Maven является интеграция Liquibase в ваш процесс сборки. Это позволяет вам отлавливать ошибки в журнале изменений ранее, а также предоставляет базу данных, с которой можно запускать автоматические тесты. Разработчики могут запускать одни и те же задачи в своей локальной среде для начальной разработки и устранения проблем. Помните: контексты  хорошо работают для встраивания тестовых данных в журнал изменений и только для их развертывания в тестовых средах.

Вы также можете предпочесть запуск Liquibase напрямую с более сложными процессами выпуска, предназначенными для устранения простоев. Например, если вы сделаете изменения в своей базе данных совместимыми с существующей кодовой базой (без команд DROP), вы можете запустить обновление Liquibase, пока старая версия вашего сайта еще работает. Как только он успешно обновится, начните поэтапное развертывание нового кода в вашем кластере.

Выполнение SQL

Обновления вручную с помощью Liquibase позволяют контролировать, когда база данных обновляется, но то, что фактически выполняется, все еще полностью управляется Liquibase. Для тех, кому нужно точно знать, что делается с их базой данных, Liquibase поддерживает режим «updateSQL» в интерфейсах командной строки, Ant и Maven. При запуске updateSQL Liquibase просто выводит SQL, который он обычно запускал. Вывод включает в себя как SQL для обновления вашей базы данных, так и SQL для обновления таблицы DATABASECHANGELOG. Проверьте вывод, как вам нужно, затем выполните его с помощью любых инструментов базы данных, которые вы предпочитаете. После запуска SQL ваша база данных будет в правильном состоянии, и Liquibase будет знать, что было выполнено, и поэтому будущие вызовы updateSQL будут включать только новые наборы изменений.

Смешивать и сочетать

Все вышеперечисленные методы также могут быть смешаны и сопоставлены по мере необходимости для обработки любых потребностей управления схемами. Некоторые проекты используют автоматическое развертывание для разработки и начального контроля качества, затем updateSQL для окончательного контроля качества и производства. Некоторые поставляемые продукты автоматически запускают Liquibase при запуске, но исправления обрабатываются в более ручном режиме. Другие автоматически запускают Liquibase на всех этапах производства, но исполняемый SQL автоматически сохраняется и отслеживается администраторами баз данных на протяжении всего процесса выпуска, чтобы убедиться, что ничего неожиданного не происходит.

Независимо от того, что вам нужно для развертывания схемы, вы сможете найти способ управлять ими с помощью Liquibase.