偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Spring Boot 集成 Flyway,數(shù)據(jù)庫也能做版本控制,太牛了!

運(yùn)維 數(shù)據(jù)庫運(yùn)維
我們都知道,Git/ SVN 是代碼界的版本控制工具,那么,F(xiàn)lyway 就是一款數(shù)據(jù)庫界的版本控制工具,它可以記錄數(shù)據(jù)庫的變化記錄。

 [[408140]]

一、Flyway 是什么?

我們都知道,Git/ SVN 是代碼界的版本控制工具,那么,F(xiàn)lyway 就是一款數(shù)據(jù)庫界的版本控制工具,它可以記錄數(shù)據(jù)庫的變化記錄。

可能很多公司都是通過人工去維護(hù)、同步數(shù)據(jù)庫腳本,但經(jīng)常會(huì)遇到疏忽而遺漏的情況,舉個(gè)簡(jiǎn)單的例子:

我們?cè)陂_發(fā)環(huán)境對(duì)某個(gè)表新增了一個(gè)字段,而提交測(cè)試時(shí)卻忘了提交該 SQL 腳本,導(dǎo)致出現(xiàn) bug 而測(cè)試中斷,從而影響開發(fā)、測(cè)試的工作效率。

有了 Flyway,我們可以按版本約定,統(tǒng)一管理所有的 SQL 腳本變更,在所有環(huán)境自動(dòng)同步數(shù)據(jù)庫,而無需人為手工控制,再也不用擔(dān)心因數(shù)據(jù)庫不同步而導(dǎo)致的各種環(huán)境問題。

官網(wǎng):https://flywaydb.org/

支持的數(shù)據(jù)庫:

支持的運(yùn)行方式:

支持的 7 個(gè)命令:

  • Migrate(遷移)
  • Clean(清理所有配置的對(duì)象)
  • Info(顯示遷移狀態(tài)和細(xì)節(jié))
  • Validate(驗(yàn)證遷移規(guī)則)
  • Undo(撤消最近的遷移)
  • Baseline(建立基線)
  • Repair(修復(fù)遷移歷史表)

二、Spring Boot 集成 Flyway

Flyway 有社區(qū)開源免費(fèi)版本和商業(yè)版本,本文以開源社區(qū)免費(fèi)版,以及 Java API 的運(yùn)行方式為示例進(jìn)行演示下 Flyway Migrate 功能。

1、引入依賴

Flyway 幾乎是零依賴,最低的要求是:

  • JDK 1.7+
  • Jdbc Driver

Spring Boot 基礎(chǔ)教程就不介紹了,棧長(zhǎng)之前寫過很多,不會(huì)的關(guān)注公眾號(hào):Java技術(shù)棧,在后臺(tái)回復(fù):boot,歷史 Spring Boot 實(shí)戰(zhàn)教程我都整理好了。

本文演示環(huán)境:

  • JDK 1.8
  • Spring Boot 2.5.0
  • MySQL 8.0
  • IntelliJ IDEA 2021.1

這里僅展示 Spring Boot 之外的核心依賴:

  1. <dependencies> 
  2.     <dependency> 
  3.         <groupId>org.springframework.boot</groupId> 
  4.         <artifactId>spring-boot-starter-data-jdbc</artifactId> 
  5.     </dependency> 
  6.     <dependency> 
  7.         <groupId>mysql</groupId> 
  8.         <artifactId>mysql-connector-java</artifactId> 
  9.         <version>8.0.21</version> 
  10.     </dependency> 
  11.     <dependency> 
  12.         <groupId>org.flywaydb</groupId> 
  13.         <artifactId>flyway-core</artifactId> 
  14.         <version>7.10.0</version> 
  15.     </dependency> 
  16. </dependencies> 

 

 

2、添加配置

Spring Boot 默認(rèn)提供了對(duì) Flyway 的自動(dòng)配置:

org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration

所以,Spring Boot 項(xiàng)目,我們僅僅只要提供對(duì)應(yīng)的配置參數(shù)即可:

  1. spring: 
  2.   datasource: 
  3.     driver-class-name: com.mysql.cj.jdbc.Driver 
  4.     url: jdbc:mysql://localhost:3306/flyway 
  5.     username: flyway 
  6.     password: 12345678 
  7.   flyway: 
  8.     locations: 
  9.       - classpath:flyway 
  10.     table: t_flyway_history 

版本注意:

Spring Boot 2.5 及以上版本,如果使用了 spring.flyway.url 進(jìn)行定義,同時(shí)需要加上 username/ password 進(jìn)行認(rèn)證。

如果是第一次使用 Flyway,需要在 resources 目錄下創(chuàng)建配置文件中指定的 Flyway 遷移目錄:resources/flyway。

Flyway 也是約定大于配置的思想,以上 Flyway 的相關(guān)配置都可以不用寫,可以說是零配置,它們都有默認(rèn)值:

  • spring.flyway.locations: classpath:db/migration,用于掃描的遷移腳本目錄
  • spring.flyway.table: flyway_schema_history,用于記錄所有的版本變化記錄

更多 Flyway 的參數(shù)配置可以參考這個(gè)類:

org.springframework.boot.autoconfigure.flyway.FlywayProperties

另外,最好是創(chuàng)建一套 Flyway 專門的數(shù)據(jù)庫表和用戶,和業(yè)務(wù)表、用戶分開,權(quán)利最小化。

三、遷移實(shí)戰(zhàn)

1、創(chuàng)建遷移腳本

然后在該目錄下創(chuàng)建遷移腳本,遷移腳本文件命名規(guī)則是:

  1. V__.sql 

注意:版本號(hào)后面是兩個(gè)下劃線。

如棧長(zhǎng)我第一次創(chuàng)建三個(gè)遷移腳本:

  • V1.0.0__create_javastack.sql
  • V1.0.1__insert_javastack.sql
  • V1.0.2__update_javastack.sql

首先創(chuàng)建一個(gè)表,然后插入幾條記錄,再更新記錄,具體的 SQL 腳本內(nèi)容就不貼上來了,完整的示例代碼已提交 Github:

https://github.com/javastacks/spring-boot-best-practice

OK,Spring Boot 集成 Flyway 及相關(guān)的腳本都弄完了,可以說是不能再簡(jiǎn)單了,我們啟動(dòng)系統(tǒng)驗(yàn)證下腳本有沒有執(zhí)行。

1)首次啟動(dòng)

從啟動(dòng)日志可以看出,已經(jīng)遷移了 3 個(gè)腳本,并且將當(dāng)前版本更新到了 v1.0.2:

查看數(shù)據(jù)庫,F(xiàn)lyway 歷史表和業(yè)務(wù)表也都已經(jīng)創(chuàng)建:

可以看出歷史表記錄了 3 個(gè)腳本的遷移詳細(xì)記錄,業(yè)務(wù)表的數(shù)據(jù)也已經(jīng)插入并得到更新:

2)不修改再次啟動(dòng)

在不修改任何代碼的情況下再次啟動(dòng):

成功驗(yàn)證了 3 個(gè)遷移腳本,打印了當(dāng)前的版本號(hào),但并沒有進(jìn)行遷移,為什么?

因?yàn)檫@三個(gè)腳本都執(zhí)行過遷移了,主要是版本號(hào)都小于等于當(dāng)前版本號(hào):1.0.2,所以不會(huì)進(jìn)行遷移。

3)修改再次啟動(dòng)

我們?cè)傩略鰞蓚€(gè) SQL 腳本:

  • V1.0.3__alter_javastack.sql
  • V1.0.4__update_javastack.sql

首先新增兩個(gè)字段:note 和 time,然后再進(jìn)行對(duì)應(yīng)的數(shù)據(jù)更新。

我們?cè)俅螁?dòng)下:

成功遷移,當(dāng)前版本來到了 v1.0.4。

查看數(shù)據(jù)庫:

note 和 time 字段已經(jīng)創(chuàng)建,并得到更新。

2、創(chuàng)建重復(fù)遷移腳本

從上面的例子我們知道,只要目錄下的 SQL 腳本版本號(hào)大于當(dāng)前版本號(hào)才會(huì)執(zhí)行遷移,并且腳本都是一次性執(zhí)行遷移的,如何做到可重復(fù)遷移呢?

Flyway 支持可重復(fù)遷移腳本,可重復(fù)遷移腳本文件命名規(guī)則是:

  1. R__.sql 

R(Repeated),即:可重復(fù)的。

這里我創(chuàng)建一個(gè)更新 note 和 time 字段的遷移腳本:

  • R__update_javastack.sql

1)首次啟動(dòng)

我們?cè)俅螁?dòng)下:

從以上截圖可以看到,重復(fù)遷移腳本也已經(jīng)成功執(zhí)行了。

2)不修改再次啟動(dòng)

如何確定能否重復(fù)執(zhí)行遷移呢?

我們不修改任何代碼再次啟動(dòng)下:

顯示沒有遷移的必要!!

那是因?yàn)槲覀儧]有對(duì)重復(fù)遷移腳本做任何的修改,所以系統(tǒng)不會(huì)遷移!

3)修改再次啟動(dòng)

我們?cè)俅胃南履_本,把 note 后面加一個(gè) ok,再次啟動(dòng)下:

腳本經(jīng)過修改后再次遷移成功了,說明可重復(fù)遷移腳本也需要經(jīng)過改動(dòng)才能再次進(jìn)行遷移,F(xiàn)lyway 會(huì)進(jìn)行腳本對(duì)比。

最后貼一下遷移腳本目錄:

這里我放到一個(gè)目錄進(jìn)行演示,實(shí)際開發(fā)中可以放到多個(gè)目錄中區(qū)分維護(hù)。

四、遷移流程

OK,我們來梳理下遷移流程:

1)Flyway 會(huì)掃描配置的腳本目錄下的腳本文件;

2)如果歷史記錄表不存在,則新建歷史記錄表;

3)如果是一次性執(zhí)行腳本(V),按版本號(hào)從小到大執(zhí)行遷移腳本,與當(dāng)前歷史表中的版本號(hào)做對(duì)比,大于當(dāng)前版本號(hào)的腳本才會(huì)被執(zhí)行遷移;

4)如果是可重復(fù)執(zhí)行腳本(R),檢查腳本是否有變動(dòng),有變動(dòng)的可重復(fù)腳本才會(huì)被執(zhí)行遷移;

Flyway Migrate 遷移流程圖:

來源官網(wǎng)

另外,我們也可以手動(dòng)刪除遷移歷史表中的遷移記錄,這樣也可以達(dá)到讓一次性腳本再次執(zhí)行的目的,但不建議在生產(chǎn)環(huán)境上進(jìn)行使用。

五、總結(jié)

使用 Flyway 可以很方便的處理數(shù)據(jù)庫表結(jié)果、數(shù)據(jù)的版本遷移,使用簡(jiǎn)單、自動(dòng)化,大大提高生產(chǎn)力,再也不需要手工在控制臺(tái)進(jìn)行,那樣更容易出錯(cuò)或者遺漏,畢竟人都是會(huì)經(jīng)常犯錯(cuò)的。

本文使用的是 Java API 的方式,在項(xiàng)目啟動(dòng)時(shí)進(jìn)行遷移,另外還有其他 3 種方式,文前有介紹,大家根據(jù)實(shí)際需要進(jìn)行應(yīng)用。

本文只是拋磚引玉,只介紹了 Flyway 中的 Migrate(遷移)環(huán)節(jié),也是 Flyway 最主要的環(huán)節(jié),另外還有其他 6 個(gè)環(huán)節(jié),后續(xù)棧長(zhǎng)在時(shí)間再進(jìn)行分享,請(qǐng)陸續(xù)關(guān)注公眾號(hào)Java技術(shù)棧,公眾號(hào)第一時(shí)間推送。

本文完整示例代碼已上傳 Github:

https://github.com/javastacks/spring-boot-best-practice

更多細(xì)節(jié)可以參考官方文檔:

https://flywaydb.org/documentation/

最后,你們有使用 Flyway 或者相關(guān)工具嗎?歡迎分享使用經(jīng)驗(yàn)~

本文轉(zhuǎn)載自微信公眾號(hào)「Java技術(shù)?!?,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java技術(shù)棧公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: Java技術(shù)棧
相關(guān)推薦

2017-12-27 15:16:35

Spring BootFlyway數(shù)據(jù)庫

2021-03-09 17:11:09

數(shù)據(jù)庫腳手架開發(fā)

2019-10-30 11:28:56

Javaflyway數(shù)據(jù)庫

2025-01-26 00:00:35

2020-08-13 07:42:15

數(shù)據(jù)庫Flyway代碼

2024-08-13 10:36:25

SpringScrew數(shù)據(jù)庫

2025-06-04 02:15:00

數(shù)據(jù)庫連接方式JDBC

2021-08-02 19:18:32

Redis緩存高并發(fā)

2021-01-19 05:27:44

HTTPSECDHE算法

2024-09-27 15:24:15

Spring數(shù)據(jù)加解密

2019-05-31 08:23:00

Oracle數(shù)據(jù)庫云渡劫

2025-03-03 08:49:59

2017-12-01 06:02:14

耦合數(shù)據(jù)庫CA

2011-08-17 10:11:34

MySQL數(shù)據(jù)庫MVCC

2017-11-03 17:05:11

開源

2025-05-15 08:45:00

開源前端手勢(shì)

2021-07-15 11:31:22

遞歸匹配參數(shù)

2023-04-28 15:15:39

數(shù)據(jù)庫JPA

2024-09-26 08:03:37

2009-06-18 16:29:00

牛新莊數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)