Spring Boot 3.0 : 集成flyway數據庫版本控制工具

目錄

  • Spring Boot 3.0 : 集成flyway數據庫版本控制工具
    • flyway是什么
    • 為什么使用flyway
      • 主要特性
      • 支持的數據庫:
    • flyway如何使用
    • spring boot 集成實現
      • 引入依賴
      • 配置
      • sql版本控制約定
        • 3種版本類型
      • 運行Spring
        • Flyway 8.2.1及以后版本不再支持MySQL?

個人主頁: 【??個人主頁】
需要您的【💖 點贊+關注】支持 💯


在這里插入圖片描述

Spring Boot 3.0 : 集成flyway數據庫版本控制工具

📖 本文核心知識點:

  • flyway是什么
  • 為什么使用flyway
  • flyway如何使用
  • spring boot 集成實現

flyway是什么

https://flywaydb.org/

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

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

為什么使用flyway

主要特性

  • 普通 SQL:純 SQL 腳本(包括占位符替換)沒有專有的XML格式,沒有鎖定
  • 無限制:使用 Java 代碼來進行一些高級數據操作
  • 零依賴:只需運行在 Java6(及以上)和數據庫所需的 JDBC 驅動
  • 約定優于配置:遷移時,自動查找系統文件和類路徑中的 SQL 文件或 Java 類
  • 高可靠性:在集群環境下進行數據庫升級是安全可靠的
  • 云支持:完全支持 Microsoft SQL Azure, Google Cloud SQL & App Engine、Heroku Postgres 和 Amazon RDS
  • 自動遷移:使用 Flyway 提供的 API,讓應用啟動和遷移同時工作
  • 快速失敗:損壞的數據庫或失敗的遷移可以防止應用程序啟動
  • 數據庫清理:在一個數據庫中刪除所有的表、視圖、觸發器,而不是刪除數據庫本身

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

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

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

支持的數據庫:

在這里插入圖片描述

flyway如何使用

在這里插入圖片描述
支持的 7 個命令:

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

spring boot 集成實現

工具版本
spring boot3.1.5
flyway10.0.1
jdk17
mysql8+

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

JDK 1.7+
Jdbc Driver

引入依賴

   implementation 'org.flywaydb:flyway-core:10.0.1'
   <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>10.0.1</version></dependency>

配置

Spring Boot 默認提供了對 Flyway 的自動配置:

org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration

在這里插入圖片描述
application.yaml配置

spring:flyway:enabled: true# 禁止清理數據庫表clean-disabled: true# 如果數據庫不是空表,需要設置成 true,否則啟動報錯baseline-on-migrate: true# 與 baseline-on-migrate: true 搭配使用baseline-version: 0locations: - classpath:db/migration/mysql #(根據個人情況設置)

將需數據遷移的 sql 文件放置到 db/migration/mysql 目錄中,啟動 Spring Boot 項目即可運行 Flyway 進行數據遷移。

注意事項:

如果 flyway 不是項目初期引入,而是在數據庫已有表的情況下引入時必須設置 baseline-on-migrate: true,設置該配置啟動項目后,flyway 就會在數據庫中創建flyway_schema_history表,并且會往該表中插入一條 version = 1 的建表記錄,如果遷移數據有 V1__ 開頭的文件,掃描文件會忽略該文件不執行遷移,進而可能引發其他遷移數據出錯的問題。

sql版本控制約定

Flyway不限定腳本里面的內容,但是對腳本文件的名稱有一定的要求,基于約定由于配置的原則,不同的類型通過文件命名方式進行區分

3種版本類型
  1. 版本遷移(Versioned Migrations)以V開頭,只會執行一次;
  2. 回退遷移(Undo Migrations)以U開頭,執行一旦發生破壞性更改,就會很麻煩,項目中一般不用;可重復執行遷移(Repeatable Migrations)以R開頭,每次修改后都會重新執行。
  3. 可重復運行的SQL,則以大寫的“R”開頭,后面再以兩個下劃線分割,其后跟文件名稱,最后以.sql結尾。比如,RaddTable.sql,Rupdate_user.sql。

版本號需要唯一,否則Flyway執行會報錯;如果V__腳本.sql,已經執行過了,不能修改里面的內容,再次執行Flyway就會報錯。R——腳本.sql,如有變化可以執行多次。
V開頭的SQL執行優先級要比R開頭的SQL優先級高。

在這里插入圖片描述

運行Spring

Flyway 8.2.1及以后版本不再支持MySQL?

在這里插入圖片描述

官方Flyway 8.2.1版本發布說明(https://flywaydb.org/documentation/learnmore/releaseNotes#8.2.1),如下圖所示
在這里插入圖片描述

從說明上可知,MySQL代碼被提取出來作為插件,需要另外增加依賴,根據官方文檔(https://flywaydb.org/documentation/database/mysql)的說明,解決方案如下:

<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-mysql</artifactId>
</dependency>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212220.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常見web漏洞的流量分析

常見web漏洞的流量分析 文章目錄 常見web漏洞的流量分析工具sql注入的流量分析XSS注入的流量分析文件上傳漏洞流量分析文件包含漏洞流量分析文件讀取漏洞流量分析ssrf流量分析shiro反序列化流量分析jwt流量分析暴力破解流量分析命令執行流量分析反彈shell 工具 攻擊機受害機wi…

Unity DOTS中的baking(一) Baker簡介

Unity DOTS中的baking&#xff08;一&#xff09; Baker簡介 baking是DOTS ECS工作流的一環&#xff0c;大概的意思就是將原先Editor下的GameObject數據&#xff0c;全部轉換為Entity數據的過程。baking是一個不可逆的過程&#xff0c;原先的GameObject在運行時不復存在&#x…

leetcode 股票DP系列 總結篇

121. 買賣股票的最佳時機 你只能選擇 某一天 買入這只股票&#xff0c;并選擇在 未來的某一個不同的日子 賣出該股票。 只能進行一次交易 很簡單&#xff0c;只需邊遍歷邊記錄最小值即可。 class Solution { public:int maxProfit(vector<int>& prices) {int res …

Vue-安裝及安裝vscode相應插件

安裝Vue 安裝nodejs&#xff0c; 地址&#xff1a;https://nodejs.org/en 下載后直接安裝。 安裝后重新打開命令行工具&#xff0c;輸入 node -v PS C:\Users\zcl36> node -v v20.10.0 2. 安裝vue包npm install -g vue/cli安裝之后&#xff0c;你就可以在命令行中訪問 vue…

【git】關于git二三事

文章目錄 前言一、創建版本庫1.通過命令 git init 把這個目錄變成git可以管理的倉庫2.將修改的內容添加到版本庫2.1 git add .2.2 git commit -m "Xxxx"2.3 git status 2.4 git diff readme.txt3.版本回退3.1 git log3.2 git reset --hard HEAD^ 二、理解工作區與暫存…

操作系統內部機制學習

切換線程時需要保存什么 函數需要保存嗎&#xff1f;函數在Flash上&#xff0c;不會被破壞&#xff0c;無需保存。函數執行到了哪里&#xff1f;需要保存嗎&#xff1f;需要保存。全局變量需要保存嗎&#xff1f;全局變量在內存上&#xff0c;無需保存。局部變量需要保存嗎&am…

Leetcode—337.打家劫舍III【中等】

2023每日刷題&#xff08;五十二&#xff09; Leetcode—337.打家劫舍III 算法思想 實現代碼 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(null…

I.MX6ULL_Linux_驅動篇(46)linux LCD驅動

LCD 是很常用的一個外設&#xff0c;在Linux 下LCD 的使用更加廣泛&#xff0c;在搭配 QT 這樣的 GUI 庫下可以制作出非常精美的 UI 界面。本章我們就來學習一下如何在 Linux 下驅動 LCD 屏幕。 Linux 下 LCD 驅動簡析 Framebuffer 設備 先來回顧一下裸機的時候 LCD 驅動是怎…

前端入門:HTML初級指南,網頁的簡單實現!

代碼部分&#xff1a; <!DOCTYPE html> <!-- 上方為DOCTYPE聲明&#xff0c;指定文檔類型為HTML --> <html lang"en"> <!-- html標簽為整個頁面的根元素 --> <head> <!-- title標簽用于定義文檔標題 --> <title>初始HT…

單點登錄方案調研與實現

作用 在一個系統登錄后&#xff0c;其他系統也能共享該登錄狀態&#xff0c;無需重新登錄。 演進 cookie → session → token →單點登錄 Cookie 可以實現瀏覽器和服務器狀態的記錄&#xff0c;但Cookie會出現存儲體積過大和可以在前后端修改的問題 Session 為了解決Co…

【其他數學】結式 resultant

結式 resultant 2023年11月30日 #analysis 文章目錄 結式 resultant介紹Sylvester矩陣應用在消元中的應用傳遞函數的化簡 下鏈 介紹 結式用來計算曲線的交點、消元、找參數化曲線的隱含方程。 為了引出定義&#xff0c;思考如下問題&#xff1a; f ( x ) x 2 ? 5 x 6 g (…

UVM建造測試用例

&#xff08;1&#xff09;加入base_test 在一個實際應用的UVM驗證平臺中&#xff0c;my_env并不是樹根&#xff0c;通常來說&#xff0c;樹根是一個基于uvm_test派生的類。真正的測試用例都是基于base_test派生的一個類。 class base_test extends uvm_test;my_env e…

14-2(C++11)類型推導、類型計算

14-2&#xff08;C11&#xff09;類型推導、類型計算 類型推導auto關鍵字auto類型推斷本質auto與引用 聯用auto關鍵字的使用限制 類型計算類型計算分類與類型推導相比四種類型計算的規則返回值后置 類型推導 auto關鍵字 C98中&#xff0c;auto表示棧變量&#xff0c;通常省略…

Leetcode刷題筆記題解(C++):25. K 個一組翻轉鏈表

思路&#xff1a;利用棧的特性&#xff0c;K個節點壓入棧中依次彈出組成新的鏈表&#xff0c;不夠K個節點則保持不變 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <stack> class Solution { …

在國內,現在月薪1萬是什么水平?

看到網友發帖問&#xff1a;現在月薪1W是什么水平&#xff1f; 在現如今的情況下&#xff0c;似乎月薪過萬這個標準已經成為衡量個人能力的一個標準了&#xff0c;尤其是現在互聯網橫行的時代&#xff0c;好像年入百萬&#xff0c;年入千萬就應該是屬于大眾的平均水平。 我不是…

kafka入門(四):消費者

消費者 (Consumer ) 消費者 訂閱 Kafka 中的主題 (Topic) &#xff0c;并 拉取消息。 消費者群組&#xff08; Consumer Group&#xff09; 每一個消費者都有一個對應的 消費者群組。 一個群組里的消費者訂閱的是同一個主題&#xff0c;每個消費者接收主題的一部分分區的消息…

大師學SwiftUI第18章Part2 - 存儲圖片和自定義相機

存儲圖片 在前面的示例中&#xff0c;我們在屏幕上展示了圖片&#xff0c;但也可以將其存儲到文件或數據庫中。另外有時使用相機將照片存儲到設備的相冊薄里會很有用&#xff0c;這樣可供其它應用訪問。UIKit框架提供了如下兩個保存圖片和視頻的函數。 UIImageWriteToSavedPh…

JAVA后端自學技能實操合集

JAVA后端自學技能實操 內容將會持續更新中,有需要添加什么內容可以再評論區留言,大家一起學習FastDFS使用docker安裝FastDFS(linux)集成到springboot項目中 內容將會持續更新中,有需要添加什么內容可以再評論區留言,大家一起學習 FastDFS 組名&#xff1a;文件上傳后所在的 st…

leetcode 100.相同的樹

涉及到遞歸&#xff0c;最好多畫圖理解&#xff0c;希望對你們有幫助 100.相同的樹 題目 給你兩棵二叉樹的根節點 p 和 q &#xff0c;編寫一個函數來檢驗這兩棵樹是否相同。 如果兩個樹在結構上相同&#xff0c;并且節點具有相同的值&#xff0c;則認為它們是相同的。 題目鏈接…

GPIO的使用--滴答定時器--pir人體紅外傳感器

目錄 一、滴答定時器的使用與原理 1、定義 2、原理 &#xff08;1&#xff09;向上計數?編輯 &#xff08;2&#xff09;向下計數 &#xff08;3&#xff09; 代碼流程 a、配置滴答時鐘喚醒頻率 b、滴答時鐘中斷函數 &#xff08;4&#xff09;結果 3、優化-->寄存…