1. 程式人生 > >Spring Boot中使用Flyway來管理數據庫版本

Spring Boot中使用Flyway來管理數據庫版本

con 數據庫更新 多人 test 修改 utf8 number jdbc ima

  flyway是一個開源的數據庫遷移工具。類似於數據庫的版本控制工具。flyway的數據庫修改文件默認放在resource下的db.migration文件夾中,以V{version_number}__{description}的格式命名。各腳本的執行信息會在數據庫的schema_version表中做詳細記錄。每一次編譯或運行時,會自動根據schema_version表中的記錄,執行還未記錄的腳本,保證數據庫更新到最新。使用flyway是一種保證處於持續開發或多人並行開發情況下項目的數據庫(包括本地數據庫)保持一致的有效方法。那麽springboot項目中如何集成flyway呢?

  第一步,在pom.xml

中增加flyway的依賴:

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

  第二步,按Flyway的規範創建版本化的SQL腳本。在工程的src/main/resources目錄下創建db/migration目錄,在db/migration目錄下創建版本化的SQL腳本V1__Base_version.sql

DROP TABLE IF EXISTS user ;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵,
  `name` varchar(20) NOT NULL COMMENT 姓名,
  `age` int(5) DEFAULT NULL COMMENT 年齡,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

  在這裏需要強調的一點是,version_number必須按增序添加。flyway每次執行會檢查所有的migration腳本,如果發下有未執行但是version_number早於已執行過的腳本存在,就會拋出異常。

  最後在spring boot的配置文件application.properties中,加入數據庫鏈接基本信息。需要提前創建migration數據庫,並給用戶root CRUD權限。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/migration?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

  準備完畢後,去控制臺執行mvn clean install -DskipTests,項目會自動重新編譯,編譯時就會檢查migration腳步並執行相應腳本。

2018-03-31 10:18:33,867  INFO DatabaseFactory:44 - Database: jdbc:mysql://127.0.0.1:3306/migration (MySQL 5.7)
2018-03-31 10:18:33,975  INFO DbValidate:44 - Successfully validated 1 migration (execution time 00:00.016s)
2018-03-31 10:18:34,089  INFO JdbcTableSchemaHistory:44 - Creating Schema History table: `migration`.`flyway_schema_history`
2018-03-31 10:18:35,081  INFO DbMigrate:44 - Current version of schema `migration`: << Empty Schema >>
2018-03-31 10:18:35,090  INFO DbMigrate:44 - Migrating schema `migration` to version 1 - demo base

  進入數據庫,看是否執行成功。

mysql> use migration;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------------+
| Tables_in_migration   |
+-----------------------+
| flyway_schema_history |
| user                  |
+-----------------------+
2 rows in set (0.00 sec)

  以後涉及到數據庫變動,直接在db.migration中根據命名規則加入相應的SQL或java腳本,在編譯時都會自動執行數據庫遷移了,是不是很方便啊。

  

Spring Boot中使用Flyway來管理數據庫版本