精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

運維 數據庫運維
我們都知道,Git/ SVN 是代碼界的版本控制工具,那么,Flyway 就是一款數據庫界的版本控制工具,它可以記錄數據庫的變化記錄。

 [[408140]]

一、Flyway 是什么?

我們都知道,Git/ SVN 是代碼界的版本控制工具,那么,Flyway 就是一款數據庫界的版本控制工具,它可以記錄數據庫的變化記錄。

可能很多公司都是通過人工去維護、同步數據庫腳本,但經常會遇到疏忽而遺漏的情況,舉個簡單的例子:

我們在開發環境對某個表新增了一個字段,而提交測試時卻忘了提交該 SQL 腳本,導致出現 bug 而測試中斷,從而影響開發、測試的工作效率。

有了 Flyway,我們可以按版本約定,統一管理所有的 SQL 腳本變更,在所有環境自動同步數據庫,而無需人為手工控制,再也不用擔心因數據庫不同步而導致的各種環境問題。

官網:https://flywaydb.org/

支持的數據庫:

支持的運行方式:

支持的 7 個命令:

  • Migrate(遷移)
  • Clean(清理所有配置的對象)
  • Info(顯示遷移狀態和細節)
  • Validate(驗證遷移規則)
  • Undo(撤消最近的遷移)
  • Baseline(建立基線)
  • Repair(修復遷移歷史表)

二、Spring Boot 集成 Flyway

Flyway 有社區開源免費版本和商業版本,本文以開源社區免費版,以及 Java API 的運行方式為示例進行演示下 Flyway Migrate 功能。

1、引入依賴

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

  • JDK 1.7+
  • Jdbc Driver

Spring Boot 基礎教程就不介紹了,棧長之前寫過很多,不會的關注公眾號:Java技術棧,在后臺回復:boot,歷史 Spring Boot 實戰教程我都整理好了。

本文演示環境:

  • 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 默認提供了對 Flyway 的自動配置:

org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration

所以,Spring Boot 項目,我們僅僅只要提供對應的配置參數即可:

  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 進行定義,同時需要加上 username/ password 進行認證。

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

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

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

更多 Flyway 的參數配置可以參考這個類:

org.springframework.boot.autoconfigure.flyway.FlywayProperties

另外,最好是創建一套 Flyway 專門的數據庫表和用戶,和業務表、用戶分開,權利最小化。

三、遷移實戰

1、創建遷移腳本

然后在該目錄下創建遷移腳本,遷移腳本文件命名規則是:

  1. V__.sql 

注意:版本號后面是兩個下劃線。

如棧長我第一次創建三個遷移腳本:

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

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

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

OK,Spring Boot 集成 Flyway 及相關的腳本都弄完了,可以說是不能再簡單了,我們啟動系統驗證下腳本有沒有執行。

1)首次啟動

從啟動日志可以看出,已經遷移了 3 個腳本,并且將當前版本更新到了 v1.0.2:

查看數據庫,Flyway 歷史表和業務表也都已經創建:

可以看出歷史表記錄了 3 個腳本的遷移詳細記錄,業務表的數據也已經插入并得到更新:

2)不修改再次啟動

在不修改任何代碼的情況下再次啟動:

成功驗證了 3 個遷移腳本,打印了當前的版本號,但并沒有進行遷移,為什么?

因為這三個腳本都執行過遷移了,主要是版本號都小于等于當前版本號:1.0.2,所以不會進行遷移。

3)修改再次啟動

我們再新增兩個 SQL 腳本:

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

首先新增兩個字段:note 和 time,然后再進行對應的數據更新。

我們再次啟動下:

成功遷移,當前版本來到了 v1.0.4。

查看數據庫:

note 和 time 字段已經創建,并得到更新。

2、創建重復遷移腳本

從上面的例子我們知道,只要目錄下的 SQL 腳本版本號大于當前版本號才會執行遷移,并且腳本都是一次性執行遷移的,如何做到可重復遷移呢?

Flyway 支持可重復遷移腳本,可重復遷移腳本文件命名規則是:

  1. R__.sql 

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

這里我創建一個更新 note 和 time 字段的遷移腳本:

  • R__update_javastack.sql

1)首次啟動

我們再次啟動下:

從以上截圖可以看到,重復遷移腳本也已經成功執行了。

2)不修改再次啟動

如何確定能否重復執行遷移呢?

我們不修改任何代碼再次啟動下:

顯示沒有遷移的必要!!

那是因為我們沒有對重復遷移腳本做任何的修改,所以系統不會遷移!

3)修改再次啟動

我們再次改下腳本,把 note 后面加一個 ok,再次啟動下:

腳本經過修改后再次遷移成功了,說明可重復遷移腳本也需要經過改動才能再次進行遷移,Flyway 會進行腳本對比。

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

這里我放到一個目錄進行演示,實際開發中可以放到多個目錄中區分維護。

四、遷移流程

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

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

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

3)如果是一次性執行腳本(V),按版本號從小到大執行遷移腳本,與當前歷史表中的版本號做對比,大于當前版本號的腳本才會被執行遷移;

4)如果是可重復執行腳本(R),檢查腳本是否有變動,有變動的可重復腳本才會被執行遷移;

Flyway Migrate 遷移流程圖:

來源官網

另外,我們也可以手動刪除遷移歷史表中的遷移記錄,這樣也可以達到讓一次性腳本再次執行的目的,但不建議在生產環境上進行使用。

五、總結

使用 Flyway 可以很方便的處理數據庫表結果、數據的版本遷移,使用簡單、自動化,大大提高生產力,再也不需要手工在控制臺進行,那樣更容易出錯或者遺漏,畢竟人都是會經常犯錯的。

本文使用的是 Java API 的方式,在項目啟動時進行遷移,另外還有其他 3 種方式,文前有介紹,大家根據實際需要進行應用。

本文只是拋磚引玉,只介紹了 Flyway 中的 Migrate(遷移)環節,也是 Flyway 最主要的環節,另外還有其他 6 個環節,后續棧長在時間再進行分享,請陸續關注公眾號Java技術棧,公眾號第一時間推送。

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

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

更多細節可以參考官方文檔:

https://flywaydb.org/documentation/

最后,你們有使用 Flyway 或者相關工具嗎?歡迎分享使用經驗~

本文轉載自微信公眾號「Java技術棧」,可以通過以下二維碼關注。轉載本文請聯系Java技術棧公眾號。

 

責任編輯:武曉燕 來源: Java技術棧
相關推薦

2017-12-27 15:16:35

Spring BootFlyway數據庫

2021-03-09 17:11:09

數據庫腳手架開發

2019-10-30 11:28:56

Javaflyway數據庫

2025-01-26 00:00:35

2020-08-13 07:42:15

數據庫Flyway代碼

2024-08-13 10:36:25

SpringScrew數據庫

2025-08-15 12:19:08

2025-06-04 02:15:00

數據庫連接方式JDBC

2021-08-02 19:18:32

Redis緩存高并發

2021-01-19 05:27:44

HTTPSECDHE算法

2025-08-01 01:35:00

2024-09-27 15:24:15

Spring數據加解密

2019-05-31 08:23:00

Oracle數據庫云渡劫

2025-03-03 08:49:59

2017-12-01 06:02:14

耦合數據庫CA

2011-08-17 10:11:34

MySQL數據庫MVCC

2017-11-03 17:05:11

開源

2021-07-15 11:31:22

遞歸匹配參數

2024-09-26 08:03:37

2025-05-15 08:45:00

開源前端手勢
點贊
收藏

51CTO技術棧公眾號

午夜视频在线观看一区| 日韩精品久久久久久| 91精品欧美一区二区三区综合在 | 亚洲精品a区| 亚洲国产日韩一级| 日韩福利在线| 国产毛片在线视频| 狠狠爱综合网| 亚洲欧美激情另类校园| 不卡的在线视频| 视频在线这里都是精品| 91天堂素人约啪| 国产精品自拍偷拍视频| 国产一级片免费| 久草精品在线| 日韩欧美区一区二| 欧美视频免费播放| 超碰在线观看免费| 久久综合一区二区| 3d蒂法精品啪啪一区二区免费| 欧美一二三区视频| 天天影视天天精品| 亚洲精选在线观看| 天天色天天干天天色| 成人美女大片| 亚洲美女区一区| 欧美在线激情| 六月丁香综合网| 美女视频网站黄色亚洲| 1769国产精品| 九九九在线视频| 日韩欧美一区二区三区在线视频 | 国产精品永久免费视频| 日本一级黄色录像| 91精品秘密在线观看| 亚洲欧美日韩中文视频| 精人妻一区二区三区| 91精品店在线| 日本精品免费观看高清观看| 国产www免费| 国产黄大片在线观看画质优化| 久久亚洲一级片| 国产精品日韩一区二区 | 老汉av免费一区二区三区| 亚州欧美日韩中文视频| 免费在线观看一级片| blacked蜜桃精品一区| 亚洲精品久久视频| 免费观看污网站| 福利一区三区| 69av一区二区三区| 97超碰成人在线| 小明成人免费视频一区| 在线观看91视频| 99福利在线观看| 筱崎爱全乳无删减在线观看 | 精品一区二区三区毛片| 中文字幕在线免费| 欧美国产激情一区二区三区蜜月| 久久96国产精品久久99软件| 欧美 日韩 中文字幕| 国产91精品精华液一区二区三区| 亚洲一区二区免费| 超碰在线播放97| 国产乱淫av一区二区三区 | 91精品日本| 日韩精品在线一区| 中文字幕视频观看| 免费福利视频一区| 亚洲男人天堂网站| 波多野在线播放| 第九色区aⅴ天堂久久香| 中文字幕日本欧美| a一级免费视频| 亚洲精品国产成人影院| 欧美大片在线看| 国产网站在线看| 一区二区三区成人精品| 日本国产高清不卡| 在线观看xxxx| 国内精品久久久久影院薰衣草 | 国产亚洲天堂网| 肉色欧美久久久久久久免费看| 在线视频你懂得一区二区三区| 超碰在线97免费| 伊人亚洲精品| 欧美成人aa大片| 国产老熟女伦老熟妇露脸| 亚洲va久久| 丝袜一区二区三区| www.5588.com毛片| 亚洲国产综合在线看不卡| 欧美性资源免费| 亚洲性猛交富婆| 国产老女人精品毛片久久| 国产精品乱码视频| 国产中文字幕在线看| 国产精品每日更新在线播放网址| 日韩最新中文字幕| 午夜激情在线播放| 欧美久久免费观看| 日韩精品人妻中文字幕有码 | 国产日本欧美在线| 成人免费网站观看| 欧美熟乱第一页| 成年人看片网站| 国产精品一区高清| 久久99久久久久久久噜噜| 免费观看成人毛片| 久久99久久99精品免视看婷婷| 91九色蝌蚪成人| 你懂的视频在线免费| 综合激情成人伊人| 久久久久人妻精品一区三寸| 四虎精品一区二区免费| 日韩经典中文字幕在线观看| 国产美女久久久久久| 亚洲制服少妇| 97视频中文字幕| 成人午夜在线观看视频| 亚洲一区二区三区四区中文字幕| 天堂av在线网站| 狼人精品一区二区三区在线| 日韩在线播放一区| 一级黄色av片| 99久久免费国产| 日本一二三区视频在线| av免费在线一区| 亚洲国模精品私拍| 欧美高清视频一区二区三区| 美女任你摸久久| 欧美日韩精品免费看| 国产www视频在线观看| 在线不卡免费av| 国产一区二区三区四区五区六区| 亚洲日韩成人| 国产成人精品福利一区二区三区| 免费黄网站在线播放| 91国产免费观看| 日韩免费高清一区二区| 欧美一区二区三区久久精品茉莉花 | 激情图片在线观看高清国产| 欧美精品三级日韩久久| 欧美熟妇激情一区二区三区| 国产精品久久久久久模特| 都市激情久久久久久久久久久| 超碰国产在线| 精品视频999| 日本一卡二卡在线播放| 久久国产精品亚洲77777| 久久99精品久久久久子伦| 欧美xxxx免费虐| 精品国产一区久久| 免看一级a毛片一片成人不卡| 国产成人亚洲综合a∨婷婷图片 | 欧美视频成人| 操人视频欧美| 第一av在线| 亚洲黄色在线看| 日本一区二区不卡在线| av在线不卡网| 国产精品丝袜久久久久久消防器材| 欧美激情15p| 日韩暖暖在线视频| 免费理论片在线观看播放老| 91成人免费在线视频| 微拍福利一区二区| 男女激情视频一区| 欧美爱爱视频网站| 日韩三级久久| 久久久久亚洲精品| 日韩精品123| 日本黄色一区二区| 永久免费看片直接| 国产高清成人在线| 男女视频网站在线观看| 亚洲人成网77777色在线播放| 欧美在线视频导航| 国产福利小视频在线观看| 精品污污网站免费看| 欧美xxxooo| 成人一区在线观看| 日韩 欧美 高清| 成人免费av| 51精品国产人成在线观看| 3344国产永久在线观看视频| 日韩精品在线免费播放| 中国一级特黄视频| 亚洲男人天堂一区| 西西大胆午夜视频| 久久成人麻豆午夜电影| www.好吊操| 国产一区二区三区站长工具| 91亚洲精品久久久久久久久久久久| 国产羞羞视频在线播放| 亚洲男人天堂网| www.爱爱.com| 一本久道中文字幕精品亚洲嫩| 成人欧美一区二区三区黑人一| 国产成人在线免费| 欧美精品成人网| 国产精品videosex极品| 污视频在线免费观看一区二区三区 | 男人天堂网在线观看| 欧美剧情电影在线观看完整版免费励志电影| 青娱乐国产在线视频| 久久久一区二区三区| 乳色吐息在线观看| 日韩av一区二区三区四区| 国产午夜精品视频一区二区三区| 神马香蕉久久| 亚洲一区二区少妇| 欧美日韩成人影院| 欧美激情亚洲精品| 日本在线免费网| 亚洲欧美日韩国产中文| 超碰免费在线97| 欧美日韩卡一卡二| 波多野结衣视频网站| 亚洲精品日韩一| 免费一级黄色录像| 91欧美一区二区| 在线成人精品视频| 久久精品国产久精国产爱| 日本黄网站免费| 尤物精品在线| 日产精品久久久久久久蜜臀| 久久精品国产亚洲夜色av网站| 精品国产免费久久久久久尖叫 | 娇小11一12╳yⅹ╳毛片| 久久在线免费观看| 看全色黄大色黄女片18| 国产精品99久久久久久久vr| 午夜免费高清视频| 久久久久久久波多野高潮日日| 97免费视频观看| 欧美国产高清| 蜜臀av.com| 久久久久国产精品| 一区精品视频| 日韩a一区二区| 先锋影音网一区| 国内精品久久久久久久影视简单 | 国产污视频在线| 亚洲女人被黑人巨大进入al| 五月婷婷综合久久| 亚洲国产精品资源| 亚洲 国产 欧美 日韩| 精品处破学生在线二十三| 性色av蜜臀av| 欧美成人午夜电影| 蜜臀av午夜精品| 亚洲国产精品电影在线观看| 欧美一区二区三区激情| 精品久久久久久久久久久院品网| 精品久久久无码中文字幕| 欧美一级高清片在线观看| 99热这里只有精品在线观看| 91精品国产欧美一区二区18| 国产欧美一区二区三区视频在线观看| 欧美日韩国产大片| 国产一区二区女内射| 91精品免费观看| 亚洲va欧美va| 亚洲国产精品美女| 青青久在线视频免费观看| 日韩久久免费电影| 国产最新视频在线| 日韩在线视频免费观看高清中文| 无遮挡的视频在线观看| zzjj国产精品一区二区| av网站大全在线| 午夜精品福利视频| 中文日产幕无线码一区二区| 国产精品久久久久久久久借妻| 精品久久久网| 3d蒂法精品啪啪一区二区免费| 久久aimee| 日本一区二区三区视频在线播放| 日韩毛片视频| 欧美交换配乱吟粗大25p| 精品成人免费| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 青青草精品视频| 日韩高清在线一区二区| av亚洲精华国产精华精华| 色一情一交一乱一区二区三区| 国产精品乱人伦一区二区| 久草中文在线视频| 日韩欧美在线看| 国产婷婷一区二区三区久久| 亚洲黄一区二区| 中文字幕在线播放| 国语自产在线不卡| 成人在线观看免费播放| 91精品国产91久久久久青草| 亚洲三级性片| 最近免费观看高清韩国日本大全| 亚洲大片av| 亚洲天堂2018av| 99久久国产综合精品女不卡| 国产精品综合激情| 亚洲国产精品综合小说图片区| 中国a一片一级一片| 日韩女优制服丝袜电影| 激情小视频在线观看| 欧美另类极品videosbestfree| 在线成人av观看| 91福利入口| 成人久久电影| 国产超级av在线| 国产精品亚洲а∨天堂免在线| av黄色在线免费观看| 亚洲国产一区二区在线播放| 中文字幕有码视频| 精品夜色国产国偷在线| 在线中文字幕-区二区三区四区| 国产精欧美一区二区三区| 爱高潮www亚洲精品| 中文精品一区二区三区| 久久综合导航| 午夜视频在线观看国产| 亚洲美女精品一区| 在线免费看av的网站| 精品中文字幕久久久久久| 午夜羞羞小视频在线观看| 国产色婷婷国产综合在线理论片a| 神马午夜久久| 很污的网站在线观看| 国内一区二区视频| 亚洲综合第一区| 欧美中文字幕一二三区视频| 日韩欧美在线观看一区二区| 97视频在线免费观看| 日韩视频1区| 成年丰满熟妇午夜免费视频 | 3d蒂法精品啪啪一区二区免费| 久久日文中文字幕乱码| 国产精品69页| 久久老女人爱爱| 毛片在线免费视频| 日韩成人在线视频网站| 多野结衣av一区| 国产综合av一区二区三区| 极品尤物久久久av免费看| 在线xxxxx| 天天射综合影视| 青青草视频在线观看| 日本精品一区二区三区在线播放视频 | 亚洲二区在线播放视频| 岛国在线视频网站| 久久久久网址| 日韩高清一级片| 亚洲一二三四五六区| 欧美一级欧美三级在线观看| 深夜国产在线播放| 国产精品12| 99国产一区| 精品少妇一区二区三区免费观| 色综合色综合色综合色综合色综合 | 国产剧情一区二区| 放荡的美妇在线播放| 日韩美女视频在线| sm性调教片在线观看 | 国产在线视频福利| 国产精品久久久久久久久免费| 青青一区二区三区| 中文字幕一区久久| 亚洲午夜羞羞片| 欧美日韩国产综合视频| 国产欧美精品xxxx另类| 自产国语精品视频| 国产精品一级黄片| 欧美亚洲综合色| 成人无遮挡免费网站视频在线观看 | 久久久午夜精品福利内容| 亚洲电影一区二区三区| 免费一级在线观看播放网址| 国产在线拍揄自揄视频不卡99| 99久久影视| www插插插无码视频网站| 91视频免费看| 国产精品第6页| 不卡av电影院| 大陆精大陆国产国语精品| 日韩欧美xxxx| 一色桃子久久精品亚洲| 黄色www视频| 人九九综合九九宗合| 中文无码久久精品| 色综合久久五月| 欧美日韩国产三级| 欧美videossex| 日本一区高清不卡| 精品影院一区二区久久久| 国内偷拍精品视频| 亚洲毛片一区二区| 伊人久久视频| 国产黄色激情视频| av一区二区久久|