Использование flyway для управления версиями базы данных MySQL в проекте SpringBoot

MySQL

что такое пролет

Flyway is an open-source database migration tool. It strongly favors simplicity and convention over configuration.

Flyway — это простой контроллер версии базы данных с открытым исходным кодом (условие больше, чем конфигурация), который в основном предоставляет такие команды, как миграция, очистка, информация, проверка, базовый уровень и восстановление. Он поддерживает режим SQL (PL/SQL, T-SQL) и режим Java, поддерживает клиент командной строки и т. д., а также предоставляет поддержку ряда подключаемых модулей (Maven, Gradle, SBT, ANT и т. д.).

Официальный сайт:flywaydb.org/

Для получения дополнительной информации о flyway, пожалуйста, погуглите.

Зачем использовать пролетный путь

В повседневной разработке мы используем git для управления версией кода, а как насчет версии базы данных? Используйте пролетный путь.

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

git: вам и вашим коллегам будет проще поддерживать один и тот же проект, и вы сможете легко получать его последние внесенные изменения.

flyway: Своевременно сообщайте своим коллегам об изменениях в базе данных и автоматически внедряйте эти изменения в свою локальную базу данных.

проблема у меня возникла

Большинство проектов, с которыми я сталкивался, уже настроены с flyway и привыкли к этому удобству.

Недавно я начал новый проект и поддерживал его с другим коллегой.Этот проект не настроен с помощью flyway, поэтому он столкнулся со следующими двумя ситуациями:

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

2. После того, как я выполню требование, я планирую разместить код в сети, и мне нужно вручную подключиться к сети (перейти к серверу или с помощью таких инструментов, как phpmyadmin), чтобы выполнить sql для создания таблицы данных до объединения кода.

Что это за античеловеческая операция? ? ? Вы не боитесь, что я по ошибке пишу create as drop?

Так что я больше не мог этого выносить, я работал сверхурочно в течение получаса после работы вчера вечером и добавил в проект зависимость от пролетного пути.

путь интеграции Springboot

1. Добавьте зависимости в проект

Maven:

<dependency>
	<groupId>org.flywaydb</groupId>
	<artifactId>flyway-core</artifactId>
	<version>5.0.3</version>
</dependency>

Bazel:

//在deps中添加
"//third_party/java:org_flywaydb_flyway_core",

2. Вapplication.propertiesДобавьте в файл следующее:

#flyway
#打开flyway
flyway.enabled=true
flyway.encoding=utf-8
#sql文件存放位置
flyway.locations=classpath:db/migration
#版本记录表格
flyway.table=schemas_version
flyway.baseline-on-migrate=true
flyway.validate-on-migrate=false

Три важные конфигурации были прокомментированы, а другие конфигурации могут быть изменены Baidu.

3. Путь, настроенный вышеclasspath:db/migrationДобавьте файл sql ниже, Формат именования:

Число после V представляет текущую версию, которая обычно находится в возрастающей форме и не может быть повторена.

Но вы можете выбрать различные формы, такие какV1,V2илиV1.1,V1.2и Т. Д.

4. Создайте новую базу данных в базе данных.Обратите внимание, что это совершенно новая библиотека.Запустите проект.При запуске проекта flyway автоматически выполнит все файлы sql и создаст новую таблицу данных.schemas_versionдля сохранения данных версии.

Легко ли использовать flyway?

Я нахожу это очень полезным, и он успешно решил мои следующие болевые точки.

  1. Я одновременно поддерживаю проект со своими коллегами и одновременно вношу некоторые изменения в базу данных. После того, как я использую git для извлечения последнего кода, операция всегда сообщает об ошибке. Мне нужно повторно выполнить оператор создания таблицы самостоятельно, чтобы создать ее локально.После использования flyway последний файл sql будет извлечен при извлечении последнего кода, а таблица данных будет автоматически создана при запуске службы, поэтому вам не нужно заботиться о каких-то таблицах данных, которые не имеют к вам никакого отношения.

  2. Когда вы принимаете новый проект, разрабатываете и отлаживаете локально, а также после локального создания новой базы данных, вам необходимо один раз выполнить оператор построения таблицы.Flyway может автоматически создать все таблицы проекта.

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

Меры предосторожности

  1. Вышеупомянутый учебник не представляет подробную конфигурацию пролетного пути.Изменения конфигурации над ежедневным использованием копии - это только три элемента, которые аннотированы.Если у вас есть другие потребности, вы можете самостоятельно использовать Baidu.

  2. Вышеупомянутое руководство предназначено для использования flyway в новом проекте, поэтому можно ли добавить зависимости flyway в существующие проекты? Конечно.

Добавьте в существующий проект метод-зависимость (этот метод для личного пользования, должны быть и другие более удобные и надежные методы, добро пожаловать к обсуждению):

На что опирается flyway, чтобы судить о версии? Воспользовавшись им один раз, вы узнаете, что он основан на базе данных.schemas_versionзаписи таблицы.

Каждый раз, когда вы запускаете файл sql один раз, строка, похожая на

V13 success

Данные.

Когда проект запускается, flyway сканирует файл sql и обнаруживает, что в настоящее времяV14Если в начале файла нет записи о выполнении V14 в базе данных, то файл будет выполнен.

Вы можете экспортировать все операторы создания таблиц текущей базы данных в файл sql, а затем создать новыйV1__init_database.sqlфайл, скопируйте все операторы создания в файл, затем создайте новую библиотеку, подключите новую библиотеку, чтобы запустить проект, а затем скопируйте новую библиотекуschemas_versionСтруктура и данные таблицы данных добавляются в существующую базу данных, поэтому существующая база данных не будет затронута при запуске проекта.

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

  1. Иногда будет записан неправильный оператор sql, и если он будет изменен и выполнен снова, будет сообщено об ошибке, чтобы показать, что в базе данных уже есть запись этой версии.В это время войдите в базу данных, чтобы удалитьschemas_versionСоответствующая запись может быть выполнена повторно. (в среде разработки всё равно не важно, мы не пойдём в рабочую среду, чтобы выполнить неправильный sql).

Резюме: flyway — хорошая штука, настоятельно рекомендуется настроить все spring boot проекты, что может сэкономить много времени и избежать многих неприятностей, вызванных совместной разработкой.

Заканчивать.





ChangeLog

2018-10-10 Завершено

Все вышеизложенное является личными мыслями, если есть какие-либо ошибки, пожалуйста, исправьте их в комментариях.

Добро пожаловать на перепечатку, пожалуйста, подпишите и сохраните исходную ссылку.

Контактный адрес электронной почты: huyanshi2580@gmail.com

Дополнительные заметки об обучении см. в личном блоге ------>Хуян тен