最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Spring?Boot中的Flyway

 更新時(shí)間:2024年01月28日 10:07:29   作者:way_more  
Flyway將數(shù)據(jù)庫(kù)結(jié)構(gòu)的變更定義為一系列遷移腳本,通常是SQL腳本文件,當(dāng)應(yīng)用程序啟動(dòng)時(shí),F(xiàn)lyway會(huì)自動(dòng)檢測(cè)并執(zhí)行未應(yīng)用的遷移腳本,將數(shù)據(jù)庫(kù)升級(jí)到最新版本,這篇文章主要介紹了深入理解Spring?Boot中的Flyway,需要的朋友可以參考下

Flyway 介紹

Flyway 是一個(gè)開源的數(shù)據(jù)庫(kù)遷移工具,MySQL, SQL Server, Oracle 等二十多種數(shù)據(jù)庫(kù)

在 Flyway 中數(shù)據(jù)庫(kù)的所有改變均稱為遷移(migration),遷移分為兩種:基于版本控制的遷移(versioned)和可重復(fù)執(zhí)行的遷移(repeatable)?;诎姹究刂频挠址譃閮煞N:常規(guī)遷移(regular)和撤銷遷移(undo)

基于版本控制的遷移

包含版本(version)、描述(description )和總和校驗(yàn)碼(checksum)。版本必須是唯一的(可以是遞增的數(shù)字或者小版本,如1.2.3等),總和校驗(yàn)碼的作用是在 Flyway 會(huì)逐個(gè)對(duì)比之前執(zhí)行過的腳本的是否被修改,如果被修改則校驗(yàn)碼結(jié)果不同,會(huì)報(bào) checksum mismatch 錯(cuò)誤,因此執(zhí)行過的腳本不應(yīng)該再修改,如果需要對(duì)已有數(shù)據(jù)表修改,應(yīng)該新建一個(gè)腳本執(zhí)行;基于版本控制的遷移僅按照版本的順序執(zhí)行一次,如果需要撤銷,可以提供相同版本的撤銷遷移來處理

可重復(fù)執(zhí)行的遷移

包含描述(description )和總和校驗(yàn)碼(checksum),但是沒有版本(version)。每當(dāng)校驗(yàn)碼發(fā)生變化(即文件被修改)時(shí)均會(huì)執(zhí)行,而不是僅執(zhí)行一次;在單次遷移中,可重復(fù)執(zhí)行的遷移按照描述的順序在其他腳本執(zhí)行后再執(zhí)行

遷移的實(shí)現(xiàn)方式又分為兩種:基于 SQL 腳本(SQL-based)的遷移和基于 Java 代碼(Java-based)的遷移

基于 SQL 腳本的遷移

命名規(guī)則:[前綴][版本號(hào)][分隔符][描述][后綴],如:V2__Add_new_table.sql,R__Add_new_table.sql

  • 前綴:常規(guī)遷移是 V,撤銷遷移是 U,可重復(fù)執(zhí)行的遷移 是 R;前綴是可配置的
  • 版本號(hào):使用下劃線或者小數(shù)點(diǎn)分割
  • 分隔符:默認(rèn)是兩個(gè)下劃線(可配置)
  • 描述:使用下劃線或者空格分割
  • 后綴:默認(rèn)是 .sql (可配置)

配置參數(shù) validateMigrationNaming 用來配置命名不符合規(guī)范的處理方式:true 忽略不符合規(guī)范的文件,false 快速失敗

基于 Java 代碼的遷移

命名規(guī)則:[前綴][版本號(hào)][分隔符][描述],如:V2__Add_new_table,R__Add_new_table

  • 前綴:常規(guī)遷移是 V,撤銷遷移是 U,可重復(fù)執(zhí)行的遷移 是 R;前綴是可配置的
  • 版本號(hào):使用下劃線分割(下劃線在運(yùn)行時(shí)會(huì)自動(dòng)替換為小數(shù)點(diǎn))
  • 分隔符:兩個(gè)下劃線
  • 描述:使用下劃線分割(下劃線在運(yùn)行時(shí)會(huì)自動(dòng)替換為空格)

Flyway 是一款開源的數(shù)據(jù)庫(kù)版本管理工具,用于管理和自動(dòng)化數(shù)據(jù)庫(kù)結(jié)構(gòu)的變更。它可以跟蹤和管理數(shù)據(jù)庫(kù)的版本控制,并在應(yīng)用程序啟動(dòng)時(shí)自動(dòng)執(zhí)行升級(jí)或回滾操作。

使用Flyway,你可以將數(shù)據(jù)庫(kù)的變更以可重復(fù)且可控的方式應(yīng)用到不同環(huán)境中,如開發(fā)、測(cè)試和生產(chǎn)環(huán)境。它支持多種數(shù)據(jù)庫(kù)系統(tǒng),包括MySQL、Oracle、PostgreSQL、SQL Server等。

Flyway將數(shù)據(jù)庫(kù)結(jié)構(gòu)的變更定義為一系列遷移腳本,通常是SQL腳本文件。每個(gè)遷移腳本都有一個(gè)唯一的版本號(hào),F(xiàn)lyway會(huì)按照版本號(hào)的順序依次執(zhí)行這些腳本,以達(dá)到數(shù)據(jù)庫(kù)結(jié)構(gòu)的變更和更新。當(dāng)應(yīng)用程序啟動(dòng)時(shí),F(xiàn)lyway會(huì)自動(dòng)檢測(cè)并執(zhí)行未應(yīng)用的遷移腳本,將數(shù)據(jù)庫(kù)升級(jí)到最新版本。如果需要回滾到之前的版本,F(xiàn)lyway也提供了回滾操作的支持。

通過使用Flyway,開發(fā)團(tuán)隊(duì)可以更好地管理數(shù)據(jù)庫(kù)結(jié)構(gòu)的變更,保持不同環(huán)境之間的數(shù)據(jù)庫(kù)一致性,并輕松地進(jìn)行版本控制和追蹤。

官方文檔:https://documentation.red-gate.com/fd/

Flyway 工作流程

  • 1、檢測(cè)數(shù)據(jù)庫(kù)狀態(tài):Flyway會(huì)連接到配置的數(shù)據(jù)庫(kù),并檢測(cè)當(dāng)前數(shù)據(jù)庫(kù)的狀態(tài),包括已應(yīng)用的遷移腳本版本和未應(yīng)用的遷移腳本。
  • 2、執(zhí)行遷移腳本:Flyway會(huì)將未應(yīng)用的遷移腳本按照版本號(hào)的順序逐一執(zhí)行。它會(huì)查找項(xiàng)目中指定的遷移腳本目錄(默認(rèn)為db/migration),并依次運(yùn)行其中的SQL腳本。
  • 3、更新數(shù)據(jù)庫(kù)狀態(tài):每當(dāng)一個(gè)遷移腳本成功執(zhí)行后,F(xiàn)lyway會(huì)將其記錄為已應(yīng)用的腳本,并將其版本號(hào)存儲(chǔ)在數(shù)據(jù)庫(kù)的元數(shù)據(jù)表( flyway_schema_history)中,以便下次啟動(dòng)時(shí)進(jìn)行跟蹤和管理。

Spring Boot集成Flyway

1、添加依賴

在項(xiàng)目的pom.xml文件中,添加Flyway的Maven依賴,如果是springboot 2.xx,使用5.2.1或5.2.4:

   <dependency>
                <groupId>org.flywaydb</groupId>
                <artifactId>flyway-core</artifactId>
                <version>${flyway-core.version}</version>
            </dependency>

2、數(shù)據(jù)庫(kù)連接信息配置

在Spring Boot項(xiàng)目的application.properties或者application.yml文件中配置數(shù)據(jù)庫(kù)的連接信息,例如:

spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=dbuser
spring.datasource.password=dbpass

3、Flyway配置

在Spring Boot項(xiàng)目的application.properties或者application.yml文件中進(jìn)行Flyway的相關(guān)配置,例如

# Flyway配置
#開啟flyway功能,默認(rèn)為true
spring.flyway.enabled=true
# 用于存儲(chǔ)遷移歷史記錄的表名,默認(rèn)為flyway_schema_history
spring.flyway.table=flyway_schema_history
# 遷移腳本編碼,默認(rèn)為UTF-8
spring.flyway.encoding=UTF-8
# 當(dāng)遷移數(shù)據(jù)庫(kù)存在但沒有元數(shù)據(jù)的表時(shí),自動(dòng)執(zhí)行基準(zhǔn)遷移,新建flyway_schema_history表
spring.flyway.baseline-on-migrate=true
# 數(shù)據(jù)庫(kù)遷移腳本的位置,默認(rèn)為classpath:db/migration
spring.flyway.locations=classpath:db/migration
# SQL遷移腳本文件名前綴,默認(rèn)為V
spring.flyway.sql-migration-prefix=V
# SQL遷移腳本文件名后綴,默認(rèn)為.sql
spring.flyway.sql-migration-suffixes=.sql
# 是否在遷移時(shí)驗(yàn)證腳本,默認(rèn)為true
spring.flyway.validate-on-migrate=true
# 檢測(cè)遷移腳本的路徑是否存在,默認(rèn)為true,如不存在,則拋出異常,如果不想拋出異??稍O(shè)為flase
spring.flyway.check-location=false
# 用于控制是否禁用 Flyway 的 clean 操作。
spring.flyway.clean-disabled=true

大家可以按照自己的需求來進(jìn)行配置,上述配置除了spring.flyway.baseline-on-migrate和spring.flyway.clean-disabled,其他都比較見名知義,所以下面講解下

spring.flyway.baseline-on-migrate

當(dāng)spring.flyway.baseline-on-migrate屬性設(shè)置為true時(shí),F(xiàn)lyway會(huì)自動(dòng)創(chuàng)建一個(gè)名為flyway_schema_history的表,并將當(dāng)前數(shù)據(jù)庫(kù)的schema版本設(shè)置為目前最新的遷移腳本版本。

具體來說,這個(gè)屬性的作用包括:

  • 當(dāng)數(shù)據(jù)庫(kù)中不存在遷移歷史記錄表時(shí),F(xiàn)lyway 會(huì)自動(dòng)創(chuàng)建該表,并將當(dāng)前已經(jīng)存在的數(shù)據(jù)庫(kù)對(duì)象標(biāo)記為已遷移狀態(tài)。
  • 當(dāng)數(shù)據(jù)庫(kù)中存在遷移歷史記錄表,但版本號(hào)低于最新的遷移腳本版本時(shí),F(xiàn)lyway 也會(huì)自動(dòng)創(chuàng)建一個(gè)基線版本,從而將現(xiàn)有的數(shù)據(jù)庫(kù)對(duì)象標(biāo)記為已遷移狀態(tài),并開始應(yīng)用最新的遷移腳本。

這樣做的目的是確保在已有數(shù)據(jù)庫(kù)上使用 Flyway 進(jìn)行遷移時(shí),無論數(shù)據(jù)庫(kù)是否已經(jīng)有遷移歷史記錄,都能夠正確地進(jìn)行遷移操作。這在初始化應(yīng)用程序時(shí)特別有用,因?yàn)樗试S你在部署應(yīng)用程序到新環(huán)境時(shí),自動(dòng)初始化數(shù)據(jù)庫(kù)并應(yīng)用最新的遷移腳本。

spring.flyway.clean-disabled

spring.flyway.clean-disabled 用于控制是否禁用 Flyway 的 clean 操作。

clean 操作是 Flyway 的一個(gè)功能,可以清空數(shù)據(jù)庫(kù)中的所有對(duì)象(比如表、視圖、存儲(chǔ)過程等),以便進(jìn)行全新的數(shù)據(jù)庫(kù)遷移。在開發(fā)和測(cè)試階段,這可能是有用的,因?yàn)樗梢源_保每次都從一個(gè)干凈的數(shù)據(jù)庫(kù)狀態(tài)開始運(yùn)行。但在生產(chǎn)環(huán)境中,執(zhí)行 clean 操作可能會(huì)導(dǎo)致數(shù)據(jù)丟失,因此通常需要禁用它。

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

在項(xiàng)目的src/main/resources/db/migration目錄下創(chuàng)建數(shù)據(jù)庫(kù)遷移腳本,命名規(guī)范為V1__Description.sql,其中V1是版本號(hào),Description是描述。例如,可以創(chuàng)建一個(gè)V1.1__CreateTable.sql的文件來創(chuàng)建表。

Flyway 的 SQL 腳本命名規(guī)則:

  • 版本號(hào):SQL 腳本的文件名應(yīng)該以一個(gè)版本號(hào)開頭,版本號(hào)可以是數(shù)字序列或者帶有點(diǎn)號(hào)分隔的數(shù)字序列,用來表示數(shù)據(jù)庫(kù)結(jié)構(gòu)的變更順序。例如,V1.1__Create_Table.sql 或 V1.2__Add_Column.sql。
  • 描述性名稱:在版本號(hào)之后,使用雙下劃線 __ 分隔,并在其后添加描述性的名稱,用來清晰地表明這個(gè)腳本的作用。例如,V1__Create_Table.sql 中的 “Create_Table” 就是一個(gè)描述性的名稱。

根據(jù)以上的命名規(guī)則,F(xiàn)lyway 會(huì)按照版本號(hào)的順序依次執(zhí)行 SQL 腳本。在 SQL 腳本的編寫中,你可以包含所有標(biāo)準(zhǔn)的 SQL 語句,比如 CREATE TABLE、ALTER TABLE、INSERT 等,以及適用于特定數(shù)據(jù)庫(kù)的特性和語法。

如果我們一個(gè)版本下有多個(gè)文件,那還可以在版本后面使用序號(hào)來區(qū)分排序

實(shí)例:V1.1.0版本下,001為創(chuàng)建腳本,002為更新腳本

V1.1.0_001__create_table.sql
V1.1.0_002__insert_table.sql

Flyway 還提供了一種特殊的 SQL 腳本命名規(guī)則,用于標(biāo)識(shí)可重復(fù)執(zhí)行的 SQL 腳本。這種命名規(guī)則是基于前綴 R__ 的方式,以大寫的“R”開頭,后面再以兩個(gè)下劃線分割,其后跟文件名稱,最后以.sql結(jié)尾

命名規(guī)則如下:

格式:R__<描述>.sql
示例:R__Initialize_Data.sql、R__Cleanup_Data.sql

可重復(fù)執(zhí)行的 SQL 腳本指的是可以在任何數(shù)據(jù)庫(kù)版本上多次運(yùn)行而不會(huì)造成影響的腳本,通常用于執(zhí)行一些初始化或數(shù)據(jù)清理等操作。

5、啟動(dòng)項(xiàng)目,flyway執(zhí)行腳本

當(dāng)我們把spring.flyway.baseline-on-migrate屬性設(shè)為true的時(shí)候,第一次啟動(dòng)項(xiàng)目會(huì)為我們創(chuàng)建flyway_schema_history表,并執(zhí)行相應(yīng)的腳本

下面是表的字段說明

installed_rank:已安裝的遷移腳本的排名(從 1 開始)。
version:遷移腳本的版本號(hào)。
description:遷移腳本的描述。
type:遷移腳本的類型(SQL、JAVA 等)。
script:遷移腳本的文件名。
checksum:遷移腳本的校驗(yàn)和。
installed_by:安裝遷移腳本的用戶。
installed_on:安裝遷移腳本的時(shí)間戳。
execution_time:執(zhí)行遷移腳本所需的時(shí)間(以毫秒為單位)。
success:表示遷移腳本是否成功安裝。

說明,如果我們是spring.flyway.baseline-on-migrate=true自動(dòng)生成的flyway_schema_history表,那么version字段默認(rèn)值為1,此時(shí)的sql腳本必須比1大才會(huì)執(zhí)行,比如V1.1,V1.1.0,V2等,如果使用V1命名我們的sql腳本,則腳本不會(huì)執(zhí)行

到此這篇關(guān)于深入理解Spring Boot中的Flyway的文章就介紹到這了,更多相關(guān)Spring Boot集成Flyway內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談JDK7和JDK8的區(qū)別在哪

    淺談JDK7和JDK8的區(qū)別在哪

    面試總是遇到這個(gè)問題,做一個(gè)小總結(jié),文中有非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java流程控制之順序結(jié)構(gòu)

    Java流程控制之順序結(jié)構(gòu)

    Java中的流程控制語句可以這樣分類:順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。下面文章我們就來看看來順序結(jié)構(gòu)的詳細(xì)介紹,主要以順序結(jié)構(gòu)簡(jiǎn)單圖示及詳細(xì)解說該內(nèi)容,需要的小伙伴可以參考一下
    2021-12-12
  • Java簡(jiǎn)單統(tǒng)計(jì)字符串中漢字,英文字母及數(shù)字?jǐn)?shù)量的方法

    Java簡(jiǎn)單統(tǒng)計(jì)字符串中漢字,英文字母及數(shù)字?jǐn)?shù)量的方法

    這篇文章主要介紹了Java簡(jiǎn)單統(tǒng)計(jì)字符串中漢字,英文字母及數(shù)字?jǐn)?shù)量的方法,涉及java針對(duì)字符串的遍歷、編碼轉(zhuǎn)換、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • 基于JVM性能監(jiān)控命令介紹

    基于JVM性能監(jiān)控命令介紹

    下面小編就為大家?guī)硪黄贘VM性能監(jiān)控命令介紹。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java Socket實(shí)現(xiàn)聊天室附1500行源代碼

    Java Socket實(shí)現(xiàn)聊天室附1500行源代碼

    Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。本篇文章手把手帶你通過Java Socket來實(shí)現(xiàn)自己的聊天室,大家可以在過程中查缺補(bǔ)漏,溫故而知新
    2021-10-10
  • Java進(jìn)行文件格式校驗(yàn)的方案詳解

    Java進(jìn)行文件格式校驗(yàn)的方案詳解

    這篇文章主要為大家詳細(xì)介紹了Java中進(jìn)行文件格式校驗(yàn)的相關(guān)方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Java從零開始創(chuàng)建功能豐富的PDF文檔

    Java從零開始創(chuàng)建功能豐富的PDF文檔

    隨著數(shù)字化辦公的普及,PDF格式因其跨平臺(tái)兼容性和安全性而被廣泛應(yīng)用于各種場(chǎng)景中,本文將詳細(xì)介紹如何使用Java來實(shí)現(xiàn)PDF文檔的一鍵生成,有需要的可以了解下
    2025-01-01
  • Mapper層繼承BaseMapper<T>需要引入的pom依賴方式

    Mapper層繼承BaseMapper<T>需要引入的pom依賴方式

    這篇文章主要介紹了Mapper層繼承BaseMapper<T>需要引入的pom依賴方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時(shí)丟失精度問題

    SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時(shí)丟失精度問題

    這篇文章主要介紹了SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時(shí)丟失精度問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Springmvc ModelAndView原理及用法詳解

    Springmvc ModelAndView原理及用法詳解

    這篇文章主要介紹了Springmvc ModelAndView原理及用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

同心县| 保康县| 定襄县| 临海市| 合江县| 东兰县| 察雅县| 富民县| 恩施市| 山东省| 阿拉善盟| 凤城市| 峨边| 玉林市| 方正县| 铜川市| 蓝田县| 金乡县| 天长市| 通河县| 榆林市| 栖霞市| 乐都县| 冷水江市| 安陆市| 抚州市| 彰化县| 沐川县| 兴化市| 荣昌县| 绥棱县| 华阴市| 南皮县| 胶州市| 唐山市| 泰和县| 多伦县| 鹿邑县| 富源县| 甘肃省| 阿坝|