Оригинальный адрес:Блог Лян Гуйчжао
адрес блога:blog.720ui.com
Добро пожаловать на официальный аккаунт: «Серверное мышление». Группа людей с одинаковой частотой растет вместе, вместе совершенствуется и преодолевает ограничения познания.
Сегодня я рассмотрю интересную тему: мы можем реализовать контроль версий проекта через Git; непрерывную интеграцию через Jenkins, затем для уровня базы данных мы по-прежнему полагаемся на чисто ручной запуск SQL-скриптов, для которых мы работаем в нескольких средах (среда разработки , Как обеспечить актуальность и правильность своих SQL-скриптов в тестовой среде, промежуточной среде, производственной среде)?
Как мы все знаем, ручные операции очень подвержены проблемам, и мы должны позволить программе помочь автоматизировать управление и миграцию. Сегодня я рекомендую Flyway, инструмент миграции базы данных с открытым исходным кодом.
Flyway поддерживает не только MySQL, но и многие другие базы данных.
На самом деле Spring Boot прекрасно интегрировал Flyway. Для этого мы можем использовать его очень удобно. Во-первых, мы вводим зависимости Maven. (Обратите внимание, что нам также нужны зависимости spring-boot-starter-jdbc, mysql-connector-java в нашем проекте)
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
Кроме того, мы настраиваем соответствующие параметры в application.yml. Spring Boot по умолчанию сканирует миграции в каталоге classpath://db/migration. Здесь автор настраивает его на db/sql через spring.flyway.locations.
spring:
flyway:
enabled: true
baseline-on-migrate: true
locations: [classpath:db/sql]
Когда системная программа запускается, она автоматически создает файл flyway_schema_history. (Конечно, вы также можете создать его вручную самостоятельно). Эта таблица представляет собой таблицу метаданных Flyway, в которой хранятся записи о каждой миграции, включая номер версии сценария миграции и значение контрольной суммы сценария SQL. При сканировании нового SQL-скрипта Flyway анализирует номер версии SQL-скрипта и сравнивает его с таблицей метаданных.Если версия SQL-скрипта обновляется, SQL-файл будет выполняться на указанной БД, в противном случае SQL быть пропущен документ.
CREATE TABLE `flyway_schema_history` (
`installed_rank` int(11) NOT NULL,
`version` varchar(50) DEFAULT NULL,
`description` varchar(200) NOT NULL,
`type` varchar(20) NOT NULL,
`script` varchar(1000) NOT NULL,
`checksum` int(11) DEFAULT NULL,
`installed_by` varchar(100) NOT NULL,
`installed_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`execution_time` int(11) NOT NULL,
`success` tinyint(1) NOT NULL,
PRIMARY KEY (`installed_rank`),
KEY `flyway_schema_history_s_idx` (`success`)
)
Затем мы вручную создаем SQL-скрипт инициализации в db/sql: V1.1__INIT_DB.sql.
DROP TABLE IF EXISTS `tag`;
CREATE TABLE `tag` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`gmtCreate` date DEFAULT NULL,
`gmtModified` date DEFAULT NULL,
`title` varchar(32) DEFAULT NULL,
`parentId` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Ну а после того, как программа снова запустится, она автоматически опубликует его в базе данных.
Здесь дополнительные знания: Правила сравнения версий Flyway. Он использует принцип выравнивания по левому краю и заменяет отсутствующую позицию на 0. Например, 1.1 выше 1.0, 1.1.1 выше 1.1, а 1.1.01 и 1.1.1 совпадают. Кроме того, они отсортированы по версии и выполняются последовательно.
Кроме того, Flyway поддерживает не только DDL, но и DML (вставка, обновление, удаление) и т.д. Поэтому мы можем создать еще один файл V1.2__INSERT_TAG_DATA.sql для проверки.
INSERT tag(title, parentId) values('java', 0);
INSERT tag(title, parentId) values('spring', 0);
Наконец, давайте обсудим распространенные типы миграции, которые поддерживает Flyway:
- Версионные миграции: скрипты обновления базы данных
- Повторяемые миграции: повторяемые, повторно выполняемые при изменении контрольных сумм сценария.
- prefix: идентификатор префикса, значение по умолчанию V означает Versioned, R означает Repeatable
- версия: Идентифицирует номер версии, состоящий из одного или нескольких чисел, разделителем между числами может быть точка или символ подчеркивания_.
- разделитель: используется для разделения информации об идентификации и описании версии, по умолчанию используется два символа подчеркивания__
- описание: информация описания, текст может быть разделен символами подчеркивания или пробелами
- суффикс: последующий идентификатор, по умолчанию .sql
Подводя итог, Flyway помогает нам автоматизировать обслуживание и управление миграцией версий базы данных с помощью метаданных (flyway_schema_history).
напиши в конце
[Мышление на стороне сервера]: давайте поговорим об основных технологиях на стороне сервера, а также обсудим структуру проекта и практический опыт первой линии Интернета. Пусть все сотрудники отдела исследований и разработок, работающие в одиночку, найдут свой собственный круг для общения и совместного обсуждения. Здесь мы можем совершенствовать наше познание, общаться с ведущими технологическими гигантами, соединяться с превосходными способами мышления, соединяться с кратчайшим путем для решения проблем, соединяться со всеми превосходными методами и разрушать ограничения познания.
Еще больше интересных статей в разделе «Серверное мышление»!