0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot整合Flyway完成數(shù)據(jù)庫(kù)持久化迭代更新

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-10 22:12 ? 次閱讀

每次服務(wù)的代碼更新部署,難免會(huì)存在數(shù)據(jù)庫(kù)結(jié)構(gòu)的變更以及字典數(shù)據(jù)的添加,手動(dòng)執(zhí)行更新腳本是一個(gè)耗時(shí)耗力的工作,而且還會(huì)出現(xiàn)遺漏或者其他狀況,SpringBoot內(nèi)部集成了一個(gè)自動(dòng)執(zhí)行數(shù)據(jù)庫(kù)腳本的第三方依賴Flyway來(lái)解決這個(gè)繁瑣的問(wèn)題。

什么是Flyway

官網(wǎng)給出的定義是`Version control for your database.
Robust schema evolution across all your environments.
With ease, pleasure and plain SQL.`(數(shù)據(jù)庫(kù)的版本控制,在所有環(huán)境中進(jìn)行穩(wěn)健的架構(gòu)演變,輕松,愉快和簡(jiǎn)單的SQL。)

Flyway 是一款開(kāi)源的數(shù)據(jù)庫(kù)版本管理工具,它更傾向于規(guī)約優(yōu)于配置的方式。

Flyway 可以獨(dú)立于應(yīng)用實(shí)現(xiàn)管理并跟蹤數(shù)據(jù)庫(kù)變更,支持?jǐn)?shù)據(jù)庫(kù)版本自動(dòng)升級(jí),并且有一套默認(rèn)的規(guī)約,不需要復(fù)雜的配置,Migrations 可以寫(xiě)成 SQL 腳本,也可以寫(xiě)在 Java 代碼中,不僅支持 Command LineJava API,還支持 Build 構(gòu)建工具和 Spring Boot 等,同時(shí)在分布式環(huán)境下能夠安全可靠地升級(jí)數(shù)據(jù)庫(kù),同時(shí)也支持失敗恢復(fù)等。

Flyway運(yùn)行原理

當(dāng)我們運(yùn)行配置使用Flyway的應(yīng)用程序時(shí),會(huì)自動(dòng)在配置數(shù)據(jù)源的數(shù)據(jù)庫(kù)內(nèi)創(chuàng)建一個(gè)名為
flyway_schema_history的表,該表內(nèi)存放了數(shù)據(jù)庫(kù)的歷史記錄信息。

然后通過(guò)掃碼應(yīng)用程序的/reosurces/db/migration目錄下的歷史版本腳本SQL文件,文件格式為:V?__desc.sql,如:V1__init-db.sql,根據(jù)版本號(hào)進(jìn)行排序后,獲取最大的版本號(hào)與flyway_schema_history表內(nèi)執(zhí)行成功的最大版本號(hào)進(jìn)行比對(duì),如果項(xiàng)目?jī)?nèi)版本較高,則自動(dòng)執(zhí)行腳本文件。

創(chuàng)建項(xiàng)目

通過(guò)idea工具創(chuàng)建SpringBoot項(xiàng)目,在pom.xml添加相關(guān)依賴如下所示:

org.springframework.bootspring-boot-starterorg.flywaydbflyway-coreorg.springframework.bootspring-boot-starter-jdbccom.zaxxerHikariCPmysqlmysql-connector-javaruntimeorg.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-engine

添加數(shù)據(jù)庫(kù)配置

application.yml配置文件內(nèi)添加數(shù)據(jù)源信息,如下所示:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/flyway
    username: root
    password: 123456
    type: com.zaxxer.hikari.HikariDataSource

添加Flyway版本腳本

腳本比較簡(jiǎn)單,大家可以任意添加一些SQL來(lái)查看結(jié)構(gòu)或者數(shù)據(jù)變動(dòng)。

db.migration目錄是SpringBoot在整合Flyway時(shí)默認(rèn)讀取版本腳本的目錄,我們可以在application.yml配置spring.flyway.locations參數(shù)進(jìn)行修改。

測(cè)試

當(dāng)我們啟動(dòng)項(xiàng)目時(shí),會(huì)自動(dòng)比對(duì)腳本的版本,在db.migration目錄內(nèi)找到V1.1__add_logging.sql為最高版本,拿著1.1再去flyway_schema_history表內(nèi)執(zhí)行成功最大的版本比對(duì),如果低于1.1則自動(dòng)執(zhí)行V1.1_add_logging.sql腳本內(nèi)容,否則跳過(guò)。

flyway_schema_history表

每次啟動(dòng)項(xiàng)目如果存在可更新的腳本信息,執(zhí)行完成后會(huì)自動(dòng)在flyway_schema_history表內(nèi)添加一條記錄。

installed_rank version description type script checksum installed_by installed_on execute_time success
1 1 init SQL V1__init.sql 2034194600 root 2019-10-23 21:44:36 17 1
2 1.1 add logging SQL V1.1_add_logging.sql 1859098444 root 2019-10-23 21:46:50 54 1

敲黑板,劃重點(diǎn)

本章簡(jiǎn)單的介紹了Flyway的基本使用方法,它很強(qiáng)大,功能遠(yuǎn)遠(yuǎn)不止于此,使用腳本統(tǒng)一自動(dòng)執(zhí)行可大大減少手動(dòng)執(zhí)行出現(xiàn)的遺漏、錯(cuò)誤等。
存在既有道理,為什么不嘗試使用呢?

審核編輯 黃昊宇
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2948

    瀏覽量

    104380
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3739

    瀏覽量

    64181
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    335

    瀏覽量

    14278
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    794

    瀏覽量

    26359
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)出現(xiàn)823錯(cuò)誤的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)庫(kù)故障: SQL Server附加數(shù)據(jù)庫(kù)出現(xiàn)錯(cuò)誤823,附加數(shù)據(jù)庫(kù)失敗。數(shù)據(jù)庫(kù)沒(méi)有備份,無(wú)法通過(guò)備份恢復(fù)數(shù)據(jù)庫(kù)。
    的頭像 發(fā)表于 09-20 11:46 ?235次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)庫(kù)</b>出現(xiàn)823錯(cuò)誤的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    ?通過(guò)Modbus讀寫(xiě)數(shù)據(jù)庫(kù)中的數(shù)據(jù)

    狀態(tài)通過(guò)‘$RDSS()’方法寫(xiě)入到Modbus緩存(狀態(tài)大于0時(shí)正常執(zhí)行查詢),上位機(jī)通過(guò)Modbus協(xié)議即可讀取到數(shù)據(jù)庫(kù)數(shù)據(jù)以及查詢結(jié)果。 第3組是從智能網(wǎng)關(guān)的Modbus緩存區(qū)域讀取數(shù)據(jù)
    發(fā)表于 03-14 13:44

    GSMA最新資訊:IMEI數(shù)據(jù)庫(kù)平臺(tái)品牌更新與鏈接地址變更告知

    GSMA最新資訊:IMEI數(shù)據(jù)庫(kù)平臺(tái)品牌更新與鏈接地址變更告知
    的頭像 發(fā)表于 02-19 17:07 ?492次閱讀
    GSMA最新資訊:IMEI<b class='flag-5'>數(shù)據(jù)庫(kù)</b>平臺(tái)品牌<b class='flag-5'>更新</b>與鏈接地址變更告知

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)】Oracle數(shù)據(jù)庫(kù)ASM實(shí)例無(wú)法掛載的數(shù)據(jù)恢復(fù)案例

    oracle數(shù)據(jù)庫(kù)ASM磁盤(pán)組掉線,ASM實(shí)例不能掛載。數(shù)據(jù)庫(kù)管理員嘗試修復(fù)數(shù)據(jù)庫(kù),但是沒(méi)有成功。
    的頭像 發(fā)表于 02-01 17:39 ?423次閱讀
    【<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)】Oracle<b class='flag-5'>數(shù)據(jù)庫(kù)</b>ASM實(shí)例無(wú)法掛載的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    無(wú)模式數(shù)據(jù)庫(kù)的利與弊

    數(shù)據(jù)管理需求日益多樣,無(wú)論是金融服務(wù)、游戲還是社交媒體行業(yè),都要求支持實(shí)時(shí)數(shù)據(jù)處理和快速迭代,無(wú)模式數(shù)據(jù)庫(kù)因其靈活性和易用性而逐漸成為開(kāi)發(fā)者的新選擇。那么,無(wú)模式
    的頭像 發(fā)表于 12-16 08:04 ?445次閱讀
    無(wú)模式<b class='flag-5'>數(shù)據(jù)庫(kù)</b>的利與弊

    常見(jiàn)的存儲(chǔ)Idea數(shù)據(jù)庫(kù)的地方

    。它們使用表格和行的結(jié)構(gòu)來(lái)組織數(shù)據(jù),并使用SQL語(yǔ)言來(lái)查詢和管理數(shù)據(jù)。一些著名的關(guān)系型數(shù)據(jù)庫(kù)包括MySQL,Oracle,Microsoft SQL Server和PostgreSQL等。這些
    的頭像 發(fā)表于 12-06 14:15 ?866次閱讀

    關(guān)于JSON數(shù)據(jù)庫(kù)

    如何理解JSON數(shù)據(jù)庫(kù)?作為NoSQL數(shù)據(jù)庫(kù)的一種類型,JSON數(shù)據(jù)庫(kù)有哪些優(yōu)勢(shì)呢?JSON數(shù)據(jù)庫(kù)如何運(yùn)作,它為應(yīng)用程序開(kāi)發(fā)者帶來(lái)了哪些價(jià)值呢?
    的頭像 發(fā)表于 12-06 13:46 ?793次閱讀
    關(guān)于JSON<b class='flag-5'>數(shù)據(jù)庫(kù)</b>

    oracle數(shù)據(jù)庫(kù)的基本操作

    、創(chuàng)建表、插入數(shù)據(jù)、查詢數(shù)據(jù)、更新數(shù)據(jù)和刪除數(shù)據(jù)等。 首先,連接到Oracle數(shù)據(jù)庫(kù)是進(jìn)行任何操
    的頭像 發(fā)表于 12-06 10:14 ?619次閱讀

    redis持久機(jī)制和如何實(shí)現(xiàn)持久

    Redis是一款高性能的非關(guān)系型數(shù)據(jù)庫(kù),其持久機(jī)制是保證數(shù)據(jù)在重啟后仍能夠保存的關(guān)鍵。Redis提供了兩種方式來(lái)實(shí)現(xiàn)持久
    的頭像 發(fā)表于 12-05 10:02 ?421次閱讀

    redis持久方式有幾種及配置

    Redis是一種內(nèi)存數(shù)據(jù)庫(kù),為了避免數(shù)據(jù)丟失,需要將數(shù)據(jù)持久到磁盤(pán)上。Redis提供了兩種持久
    的頭像 發(fā)表于 12-04 11:09 ?569次閱讀

    如何在Spring Boot應(yīng)用程序中整合ZXing庫(kù)

    在數(shù)字化時(shí)代,二維碼已經(jīng)成為了信息交流的一種常見(jiàn)方式。它們被廣泛用于各種應(yīng)用,從產(chǎn)品標(biāo)簽到活動(dòng)傳單,以及電子支付。本文將向您展示如何在Spring Boot應(yīng)用程序中整合ZXing庫(kù),
    的頭像 發(fā)表于 12-03 17:39 ?1036次閱讀

    什么是JSON數(shù)據(jù)庫(kù)

    如何理解JSON數(shù)據(jù)庫(kù)?作為NoSQL數(shù)據(jù)庫(kù)的一種類型,JSON數(shù)據(jù)庫(kù)有哪些優(yōu)勢(shì)呢?JSON數(shù)據(jù)庫(kù)如何運(yùn)作,它為應(yīng)用程序開(kāi)發(fā)者帶來(lái)了哪些價(jià)值呢?文章速覽:什么是JSON什么是JSON
    的頭像 發(fā)表于 12-02 08:04 ?779次閱讀
    什么是JSON<b class='flag-5'>數(shù)據(jù)庫(kù)</b>

    NoSQL 數(shù)據(jù)庫(kù)如何選型

    什么是NoSQL數(shù)據(jù)庫(kù)?為什么要使用NoSQL數(shù)據(jù)庫(kù)?鍵值數(shù)據(jù)庫(kù)內(nèi)存鍵值數(shù)據(jù)庫(kù)文檔數(shù)據(jù)庫(kù)列式數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 11-26 08:05 ?403次閱讀
    NoSQL <b class='flag-5'>數(shù)據(jù)庫(kù)</b>如何選型

    mysql是一個(gè)什么類型的數(shù)據(jù)庫(kù)

    MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),用于存儲(chǔ)和管理大量結(jié)構(gòu)數(shù)據(jù)。它被廣泛用于各種應(yīng)用程序和網(wǎng)站的后端,包括電子商務(wù)平臺(tái)、社交媒體網(wǎng)站、金融系統(tǒng)等等。MySQL的特點(diǎn)是性能高、可靠性
    的頭像 發(fā)表于 11-16 14:43 ?1573次閱讀

    HarmonyOS數(shù)據(jù)管理與應(yīng)用數(shù)據(jù)持久(一)

    一. 數(shù)據(jù)管理概述 功能介紹 數(shù)據(jù)管理為開(kāi)發(fā)者提供數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)管理能力,比如聯(lián)系人應(yīng)用數(shù)據(jù)可以保存到數(shù)
    發(fā)表于 11-01 16:27