數據庫版本自動管理

FlywayDB 是一款 開源數據庫版本管理工具,開發中將表結構的變更或數據初始化腳本維護好,更新到測試環境或線上發版啟動服務的時候,會檢測版本號自動執行數據庫變更,可以減少每次發版到其他環境的人工執行操作。

工作流程

  • 初始化階段
    首次運行時檢查目標數據庫是否存在 flyway_schema_history 表,不存在則創建。

  • 腳本掃描與版本比對
    默認掃描 classpath:db/migration 目錄下的腳本(可配置),按版本號排序后與歷史表比對。
    版本號規則V<版本號>__<描述>.sql,版本號需唯一且遞增,否則報錯。
    版本號建議使用時間戳或遞增數字,如V20230701__description.sql

  • 遷移執行
    對比歷史表后,執行未應用的腳本,并記錄版本、校驗和等信息到元數據表。
    使用 CRC32 算法校驗腳本內容,防止篡改。

  • 鎖機制
    通過數據庫排他鎖(如 SELECT ... FOR UPDATE)協調多節點并發執行,確保遷移原子性。

項目集成

1. 添加依賴
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId>
</dependency>
2. Nacos配置
spring:flyway:enabled: truelocations: classpath:db/updatevalidate-on-migrate: trueencoding: UTF-8#    placeholders:#      table-prefix: "test_"baseline-on-migrate: true  # 對非空數據庫首次使用時設為true#    baseline-version: "20250701"      # 基線版本號table: table_update_history  # 使用自定義表名out-of-order: false  # 生產環境必須按順序執行

在這里插入圖片描述
這里以項目下3個腳本為例,先插入一張新表,然后分別插入1月到3月、4月到6月的數據,數據庫中沒有這張表。
項目啟動完會看到庫里多了event_tracking表,插入了兩個腳本初始化的數據。
在這里插入圖片描述

同時會按配置生成表變更記錄,維護腳本變更版本號。
在這里插入圖片描述
這里有幾點要注意:

  • 如果數據庫用戶沒有建表權限,則需要管理員提前創建;
  • 表結構需符合Flyway要求;
  • 如果使用多個數據源,需要為每個數據源配置單獨的Flyway實例,每個實例會維護自己的歷史表;
  • 可以配置clean-on-validation-error: true便于調試,但生產環境必須禁用此選項;
  • 如果項目組開發人員比較多,有些迭代版本開發周期比較長,之前開發定義好的版本號,在開發環境執行沒問題,等測完真正發版的時候,版本號可能不是最大的(中間有其他開發先發版),這時需要重新維護版本號;

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

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

相關文章

解決Linux綁定失敗地址已使用(端口被占用)的問題

文章目錄解決 bind failed: Address already in use 問題一、問題原因1. **端口已經被其他程序占用**2. **端口處于 TIME_WAIT 狀態**3. **未正確關閉套接字**二、如何排查和解決問題1. **確認端口是否被占用**2. **查找并殺掉占用端口的進程**3. **等待端口釋放&#xff08;TI…

Ragas的Prompt Object

Prompt在Ragas中被用在各種指標、合成數據生成任務中。同時也為提供了替換各種自動以提示詞的方式。Ragas提供了如下幾種Prompt Objects。 instruction:prompt的基礎組成,通過自然語言清晰的描述LLM需要完成的任務。在prompt object中用instruction變量定義。few-shot exampl…

PHP語法高級篇(一):日期時間處理和包含文件

從本篇文章開始&#xff0c;將學習PHP的高級特性內容。本篇文章將記錄在PHP中如何進行日期時間處理和包含文件的學習過程。 一、日期和時間 在PHP中&#xff0c;date() 函數用于格式化日期或時間。 說明 date(string $format, ?int $timestamp null): string 使用指定整數…

請求服務端獲取broker的機房歸屬信息異常

該錯誤表明服務在嘗試獲取 broker 的 ?機房歸屬信息? 時遇到異常。以下是詳細分析和解決方案建議&#xff1a;?問題定位與常見原因??網絡問題?客戶端無法連接存儲機房信息的元數據服務?&#xff08;如配置中心、注冊中心&#xff09;。防火墻或安全組阻斷了相關端口&…

Android 中的多線程編程全面解析

Android 中的多線程編程全面解析 一、Android 線程模型基礎 主線程&#xff08;UI 線程&#xff09;特性 唯一性&#xff1a;每個應用只有一個主線程職責&#xff1a;處理 UI 操作和用戶交互限制&#xff1a;禁止在主線程執行耗時操作&#xff08;超過5秒會導致 ANR&#xff09…

golang -gorm 增刪改查操作,事務操作

增刪改查 1. 插入數據// api func SaveUser(ctx *gin.Context) {result : &common.Result{}user : &dao.User{}err : ctx.ShouldBindJSON(&user)if err ! nil {ctx.JSON(http.StatusOK, result.Fail(400, "請使用json數據格式傳值"))return}// 調用驗證函…

大數據時代UI前端的智能化服務升級:基于用戶情境的主動服務設計

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;從 “被動響應” 到 “主動預判” 的 UI 服務革命當用戶在暴雨天打開外賣…

CUDA性能優化實戰:7個步驟讓并行歸約算法提升10倍效率

本文深入探討了一個經典的并行計算算法——并行歸約&#xff08;Parallel Reduction&#xff09;的性能優化過程&#xff0c;通過七個漸進式的優化步驟&#xff0c;展示了如何將算法性能提升至極致。這項研究基于Mark Harris在NVIDIA網絡研討會中提出的優化方法&#xff0c;在重…

詳解梯度消失和梯度爆炸(反向傳播)?

什么是梯度消失&#xff1f;梯度消失&#xff08;Gradient Vanishing&#xff09; 是指在訓練神經網絡時&#xff0c;反向傳播過程中計算得到的梯度&#xff08;用于更新參數的重要信息&#xff09;隨著網絡層數的增加而急劇減小&#xff0c;甚至趨近于零的現象。這會導致深層網…

端到端自動駕駛:挑戰與前沿

端到端自動駕駛&#xff1a;挑戰與前沿 End-to-End Autonomous Driving: Challenges and Frontiers 自動駕駛研究社區已見證了越來越多采用端到端算法框架的方法的快速增長&#xff0c;這些方法利用原始傳感器輸入生成車輛的運動規劃&#xff0c;而不是專注于諸如檢測和運動預測…

rust cargo 編譯雙架構的庫

這個錯誤表明你的 Rust 工具鏈沒有安裝 aarch64-apple-darwin 目標平臺。以下是完整的解決方案&#xff1a; 解決方案 ??安裝目標平臺?? (必須步驟) rustup target add aarch64-apple-darwin??驗證安裝?? (可選但推薦) rustup target list --installed # 應該能看到 aa…

Apache Shiro 框架詳解

文章目錄一、Shiro 核心功能二、Shiro 架構2.1 三層架構2.2 核心組件&#xff08;SecurityManager 內部&#xff09;三、核心流程詳解3.1 認證流程&#xff08;登錄&#xff09;流程步驟&#xff1a;認證流程序列圖&#xff1a;3.2 授權流程&#xff08;權限校驗&#xff09;流…

【保姆級喂飯教程】Windows下安裝Git Flow

目錄前言一、SourceTree二、Git for Windows (previously MSysGit)1. 下載補丁1.1 getopt.exe1.2 libintl3.dll1.3 libiconv2.dll1.4 安裝補丁2. 安裝Git Flow3. 測試3.1 初始化&#xff08;Initialize&#xff09;3.2 設置遠程3.3 創建分支3.4 功能開發3.5 功能提交3.6 推送分…

manifest.json只有源碼視圖沒其他配置

項目場景&#xff1a;提示&#xff1a;這里簡述項目相關背景&#xff1a;有時候我們從git上面拉下代碼&#xff0c;第一次運行時發現&#xff0c;沒運行項&#xff0c;再看manifest.json文件&#xff0c;就只有json文件&#xff0c;沒有其他配置項原因分析&#xff1a;提示&…

數據分析-名詞

一、網頁訪問數據指標1.IP &#xff08;Internet Protocol&#xff09;獨立IP 通常采用獨立IP數&#xff0c; 理論上指00:00-24:00內相同IP地址重復訪問只被計算一次。而不同的商業統計工具&#xff0c;縮短去 掉重復統計的時間&#xff0c;也是數據統計放大的一個常用套路。 &…

UDP屬于是一種什么服務器?

UDP是一種傳輸層協議&#xff0c;通常會被應用在計算機網絡中&#xff0c;為企業與用戶提供無連接的數據信息傳輸功能&#xff0c;與TCP協議相比較來說&#xff0c;UDP會更加的簡單但是UDP在可靠性方面沒有一定的保證&#xff0c;屬于是一種基于UDP協議進行通信的服務器。UDP服…

ARM單片機OTA解析(一)

文章目錄一、單片機燒寫程序的幾種方法二、Bootloader如何加載啟動App一、單片機燒寫程序的幾種方法 在線應用編程&#xff0c;由開發者實現Bootloader功能&#xff0c;比如ARM單片機的Code分區中的Flash本是存儲用戶應用程序的區間(上電從此處執行用戶代碼)&#xff0c;開發者…

C語言基礎教程--從入門到精通

C語言基礎教程–從入門到精通&#xff08;總體概括&#xff09; 接下來會對每一個章節進行詳細的總結與整理&#xff0c;希望對大家有用&#xff01;大家一起學習&#xff01; 目錄C語言基礎教程--從入門到精通&#xff08;總體概括&#xff09;**接下來會對每一個章節進行詳細…

單細胞分析教程 | (二)標準化、特征選擇、降為、聚類及可視化

在完成質控&#xff08;QC&#xff09;后&#xff0c;我們已經過濾掉了低質量細胞、雙細胞和低表達基因&#xff0c;獲得了較為干凈的單細胞數據集單細胞分析教程 | &#xff08;一&#xff09;Python單細胞質控全流程。接下來&#xff0c;我們將進行以下關鍵步驟&#xff1a; …

大模型 Agent(智能體)技術簡介

大模型 Agent&#xff08;智能體&#xff09;技術 是當前人工智能領域的前沿方向&#xff0c;它賦予大型語言模型&#xff08;LLM&#xff09;自主感知、規劃、決策和行動的能力&#xff0c;使其不再局限于“被動應答”&#xff0c;而是能主動完成復雜任務。簡單來說&#xff0…