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

Spring Boot中使用Flyway來管理資料庫版本

久違了的Spring Boot系列,今天抽空更新一篇。之前寫過很多篇關於資料訪問的文章了,比如下面這些:

  • 使用JdbcTemplate

  • 使用Spring-data-jpa簡化資料訪問層(推薦)

  • 多資料來源配置(一):JdbcTemplate

  • 多資料來源配置(二):Spring-data-jpa

  • 使用NoSQL資料庫(一):Redis

  • 使用NoSQL資料庫(二):MongoDB

  • 整合MyBatis

  • MyBatis註解配置詳解

  • 使用事務管理

由於這些文章寫的比較早,公眾號中沒有存檔,如果沒有讀過上面內容的讀者,有興趣的可以通過去我的部落格(didispace.com)閱讀。還想看更多?戳這裡:Spring乾貨彙總(含Spring Boot與Spring Cloud)

在上面的使用JdbcTemplate一文中,主要通過spring提供的JdbcTemplate實現對使用者表的增刪改查操作。在實現這個例子的時候,我們事先在MySQL中建立了使用者表。建立表的過程我們在實際開發系統的時候會經常使用,但是一直有一個問題存在,由於一個系統的程式版本通過git得到了很好的版本控制,而資料庫結構並沒有,即使我們通過Git進行了語句的版本化,那麼在各個環境的資料庫中如何做好版本管理呢?下面我們就通過本文來學習一下在Spring Boot中如何使用Flyway來管理資料庫的版本。

Flyway簡介

Flyway是一個簡單開源資料庫版本控制器(約定大於配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支援SQL(PL/SQL、T-SQL)方式和Java方式,支援命令列客戶端等,還提供一系列的外掛支援(Maven、Gradle、SBT、ANT等)。

官方網站:https://flywaydb.org/

本文對於Flyway的自身功能不做過多的介紹,讀者可以通過閱讀官方文件或利用搜索引擎獲得更多資料。下面我們具體說說在Spring Boot應用中的應用,如何使用Flyway來建立資料庫以及結構不一致的檢查。

動手試一試

下面我們可以通過對使用JdbcTemplate一文中的例子進行加工完成。讀者也可以拿任何一個與資料訪問相關的工程來做如下內容的實驗:

  • 第一步,在 pom.xml中增加flyway的依賴:

  1. <dependency>

  2. <groupId>org.flywaydb</groupId>

  3. <artifactId>

    flyway-core</artifactId>

  4. <version>5.0.3</version>

  5. </dependency>

  • 第二步,按Flyway的規範建立版本化的SQL指令碼。

  • 在工程的 src/main/resources目錄下建立 db目錄

  • 在 db目錄下建立版本化的SQL指令碼 V1__Base_version.sql

  1. DROP TABLE IF EXISTS user ;

  2. CREATE TABLE `user`(

  3. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',

  4. `name` varchar(20) NOT NULL COMMENT '姓名',

  5. `age`int(5) DEFAULT NULL COMMENT '年齡',

  6.  PRIMARY KEY (`id`)

  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

  • 第三步,在 application.properties檔案中配置Flyway要載入的SQL指令碼位置。按第二步建立的結果配置如下:

  1. flyway.locations=classpath:/db

  • 第四步,執行單元測試 ApplicationTests,此時我們在日誌中可以看到如下資訊:

  1. INFO 82441---[main] o.f.core.internal.util.VersionPrinter:FlywayCommunityEdition5.0.3byBoxfuse

  2. INFO 82441---[main] o.f.c.internal.database.DatabaseFactory:Database: jdbc:mysql://localhost:3306/test (MySQL 5.7)

  3. INFO 82441---[main] o.f.core.internal.command.DbValidate:Successfully validated 1 migration (execution time 00:00.022s)

  4. INFO 82441---[main] o.f.c.i.s.JdbcTableSchemaHistory:CreatingSchemaHistory table:`test`.`flyway_schema_history`

  5. INFO 82441---[main] o.f.core.internal.command.DbMigrate:Current version of schema `test`:<<EmptySchema>>

  6. INFO 82441---[main] o.f.core.internal.command.DbMigrate:Migrating schema `test` to version 1-Base version

  7. WARN 82441---[main] o

    相關推薦

    Spring Boot使用Flyway管理資料庫版本

    久違了的Spring Boot系列,今天抽空更新一篇。之前寫過很多篇關於資料訪問的文章了,比如下

    Spring Boot 基礎系列教程 | 第十八篇:使用Flyway管理資料庫版本

    推薦 Spring Boot/Cloud 視訊: 如果沒有讀過上面內容的讀者,有興趣的可以一閱。在前面的使用JdbcTemplate一文中,主要通過spring提供的JdbcTemplate實現對使用者表的增刪改查操作。在實現這個例子的時候,我們事先在MySQ

    Spring Boot使用JdbcTemplate訪問資料庫

    一 資料來源的配置 1 pom中引入JDBC的支援 <dependency> <groupId>org.springframework.boot</groupI

    Spring Boot的事務管理實戰

    一 什麼是事務 在開發企業應用時,對於業務人員的一個操作實際是對資料讀寫的多步操作的結合。由於資料操作在順序執行的過程中,任何一步操作都有可能發生異常,異常會導致後續操作無法完成,此時由於業務邏輯並未正確的完成,之前成功操作資料的並不可靠,需要在這種情況下進行回退。 事務

    Spring Boot引入Neo4j圖形資料庫

    建立節點(node),查詢節點,為了好的展示效果,對關係(relation)的處理後續再說。 1、Neo4j配置 pom.xml <dependency> <groupId>org.springframework.boot</groupId>

    SpringCloud SpringBoot mybatis 分散式微服務(十八)Spring Boot的事務管理

    快速入門在Spring Boot中,當我們使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依賴的時候,框架會自動預設分別注入DataSourceTransactionManager或JpaTransactionM

    使用spring boot的JPA操作資料庫

    前言 Spring boot中的JPA 使用的同學都會感覺到他的強大,簡直就是神器一般,通俗的說,根本不需要你寫sql,這就幫你節省了很多時間,那麼下面我們來一起來體驗下這款神器吧。 一、在pom中新增依賴 <dependency> <

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

    con 數據庫更新 多人 test 修改 utf8 number jdbc ima   flyway是一個開源的數據庫遷移工具。類似於數據庫的版本控制工具。flyway的數據庫修改文件默認放在resource下的db.migration文件夾中,以V{version_num

    企業分布式微服務雲SpringCloud SpringBoot mybatis (十六)Spring Boot使用LDAP統一管理用戶信息

    數據庫表 repo on() intellij attr ads get 可選 mail LDAP簡介 LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是實現提供被稱為目錄服務的信息服務。目錄服務是一種特殊的數據庫系

    Spring Boot使用LDAP統一管理使用者資訊實戰

    一 LDAP簡介 LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是實現提供被稱為目錄服務的資訊服務。目錄服務是一種特殊的資料庫系統,其專門針對讀取,瀏覽和搜尋操作進行了特定的優化。目錄一般用來包含描述性的,基於屬性

    Spring Boot使用LDAP統一管理使用者資訊

    很多時候,我們在構建系統的時候都會自己建立使用者管理體系,這對於開發人員來說並不是什麼難事,但是當我們需要維護多個不同系統並且相同使用者跨系統使用的情況下,如果每個系統維護自己的使用者資訊,那麼此時使用者資訊的同步就會變的比較麻煩,對於使用者自身來說也會非

    企業分散式微服務雲SpringCloud SpringBoot mybatis (十六)Spring Boot使用LDAP統一管理使用者資訊

    LDAP簡介LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是實現提供被稱為目錄服務的資訊服務。目錄服務是一種特殊的資料庫系統,其專門針對讀取,瀏覽和搜尋操作進行了特定的優化。目錄一般用來包含描述性的,基於屬性的資訊並

    Spring Boot 整合 Flyway 實現資料庫版本控制

    在專案迭代開發中,難免會有更新資料庫 Schema 的情況,比如新增新表、在表中增加欄位或者刪除欄位等,那麼當我對資料庫進行一系列操作後,如何快速地在其他同事的電腦上同步?如何在測試/生產伺服器上快速同步? ![](https://img-blog.csdnimg.cn/2020050711360495

    Spring Boot 使用 @Transactional 註解配置事務管理

    all arc obj 資料 ror 科學 部分 直接 true 事務管理是應用系統開發中必不可少的一部分。Spring 為事務管理提供了豐富的功能支持。Spring 事務管理分為編程式和聲明式的兩種方式。編程式事務指的是通過編碼方式實現事務;聲明式事務基於 AOP,將具體

    Spring Boot使用MongoDB資料庫實戰

     一 MongoDB簡介 MongoDB是一個基於分散式檔案儲存的資料庫,它是一個介於關係資料庫和非關係資料庫之間的產品,其主要目標是在鍵/值儲存方式(提供了高效能和高度伸縮性)和傳統的RDBMS系統(具有豐富的功能)之間架起一座橋樑,它集兩者的優勢於一身。 MongoDB支援

    Spring Boot使用Redis資料庫實戰

    一 新增依賴 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>

    Spring Boot 使用 Spring AOP 和 AspectJ 測量方法的執行時間

    原文連結:https://dzone.com/articles/logging-average-method-execution-times-via-aspectj 作者:Murat Derman 譯者:Darren Luo 想要了解更多有關測量方法執行時間的資訊?檢視本教

    Spring Boot使用MongoDB資料庫

    我們在網際網路產品中經常會用到另外一款著名的NoSQL資料庫MongoDB。 下面就來簡單介紹一下MongoDB,並且通過一個例子來介紹Spring Boot中對MongoDB訪問的配置和使用。 MongoDB簡介 MongoDB是一個基於分散式檔案儲存的資料庫,它

    Spring boot java.util.Date 在json、資料庫之間格式的相互轉換

    首先使用springboot開發網站時,經常會涉及到日期的形式,那麼在程式碼中使用java.util.Date來轉化為json格式的字串,應該怎樣轉化呢?將Date型別存入資料庫有應該怎樣實現呢? Date與json的相互轉換 實現Date轉換為json格

    Django 使用admin管理資料庫的內容

    Django提供了自帶的admin功能,可以很方便的管理網站。 首先要執行python manage.py createsuperuser 命令來建立一個管理員賬戶。 然後在url中輸入/admin 即可到達管理員登入頁,登入之後會發現並沒有資料庫中要顯示的