在SpringBoot中使用flyway進行數據庫版本管理

本文大綱

  • flyway是什麼
  • 能幫助咱們解決什麼問題
  • springboot環境下使用flyway
  • flyway的工做原理

1、flyway是什麼

Flyway是一個開源的數據庫版本管理工具,而且極力主張「約定大於配置」,簡單、專一、強大。可使用SQL完成數據同步,或者基於特定數據庫的語法(例如PL / SQL,T-SQL等)或Java代碼(適用於高級數據轉換或處理LOB)的方式編寫。而且數據庫支持很是普遍:git

2、能幫助咱們解決什麼問題

那麼,咱們首先解釋一下什麼是數據庫版本管理?程序員

  • 你們都知道git是幫助軟件項目進行代碼版本的管理,方便程序員協同開發
  • 那麼FlyWay就是數據庫版本管理的工具,目標是保證多環境下數據庫的狀態一致性,方便程序員協同開發

舉個簡單的例子:spring

  • 開發人員一般使用同一個數據庫或者自建庫進行開發工做,這個數據庫一般叫作開發庫。
  • 測試人員爲了保障測試數據的有效性,一般自建一個庫進行測試,這個數據庫叫作測試庫。
  • 銷售人員爲了保證演示數據的效果,一般也須要一個單獨的數據庫,這個數據庫叫作演示庫。
  • 正式生產上線的庫,供給用戶使用,這個數據庫叫作生產庫。

那麼問題就來了:咱們如何保證數據庫schema的狀態一致?某一個開發人員修改了開發庫,新增了一個字段,如何可以有效的同步到測試庫,測試經過以後如何有效的同步到演示庫和生產庫?在沒有Flyway以前,這個動做一般是由上線程序員本身去執行SQL來完成的,或者比較正規的公司專門有版本管理人員去操做。這種方式一般存在幾個問題:sql

  • 開發團隊內部的溝通成本增長,好比某一個成員修改了一個數據庫字段,其餘人可能都不知道。
  • 開發團隊和測試團隊和其餘團隊之間的溝通成本增長
  • 沒法完成自動化的持續集成,持續集成的過程代碼能夠經過git、maven、docker、k8s等工具來實現自動化的代碼打包、部署。可是數據庫的狀態變化沒有獲得有效的自動變動,持續集成的過程的自動化就沒法實現。

這也就是咱們學習Flyway的目的:Flyway可以自動的幫助咱們有效的同步各個發佈數據庫之間的狀態,無論你是加了或者刪了一個字段,仍是新加了一張表,他都能自動化的跟隨項目的發佈同時發佈。docker

3、 springboot環境下使用flyway

首先,咱們爲SpringBoot項目添加Flyway依賴數據庫

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>6.0.7</version>
</dependency>複製代碼

而後咱們要保證數據庫裏面有spring.datasource的數據源配置。而且在application.properties中添加以下的配置安全

spring:
  flyway:
    enabled: true    #啓用flyway
    encoding: utf-8   #字符編碼
    locations: ["classpath:db/migration"]  #版本控制文件存放目錄複製代碼

而後在resources/db/migration目錄下面,加入以下格式的腳本:springboot

V1.1__create_table.sql
V1.2__update_person_table.sql
V1.3__create_new_table.sql
V1.4__add_person_comment.sql
V2.1__modify_person_data.sql複製代碼

大寫V後面緊跟數據庫腳本的版本號(遞增形式、不能重複),而後兩個下劃線,以後是對腳本內容進行描述。如:V1.1__create_table.sql是用於建立表結構的數據庫腳本,內容是create table之類的DDL。 第二個腳本是對數據庫中person表進行了更新。總之腳本里面的內容,就是你但願對spring.datasource表明的數據庫進行的操做,能夠是表的建立、刪除、修改,也能夠是對數據的建立刪除修改。app

固然,我我的不建議將DML-SQL寫入腳本,也就是不要在這個腳本里面寫insert、update、delete。以避免不注意的狀況下,形成生產數據的誤操做。若是大家公司在生產上線管理方面沒有嚴格的審覈程序,在生產環境下,就乾脆不要使用flyway,方便開發是一方面,生產安全更爲重要!maven

最後,啓動SpringBoot項目,在該目標庫範圍內沒有執行過的SQL腳本被執行。並將腳本執行信息保存在數據庫的schemaversionhistory數據表裏面。

4、FlyWay的工做原理

  • 首先項目啓動flyway會去db/migration下面掃描文件,獲取文件名,並解析版本號
  • 而後去schemaversionhistory表裏面找對應的版本執行信息,若是你的文件版本號大於數據庫記錄版本,就執行腳本。不然就忽略。

期待您的關注

相關文章
相關標籤/搜索