国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot使用flywaydb實(shí)現(xiàn)數(shù)據(jù)庫(kù)版本管理【附源碼】

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot使用flywaydb實(shí)現(xiàn)數(shù)據(jù)庫(kù)版本管理【附源碼】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、項(xiàng)目背景

本文主要是配合SpringBoot使用用戶輸入的自定義數(shù)據(jù)源啟動(dòng)一文附帶產(chǎn)出。前文主要介紹了SpringBoot無(wú)數(shù)據(jù)源啟動(dòng),然后通過(guò)用戶錄入自定義數(shù)據(jù)庫(kù)配置后,連接數(shù)據(jù)庫(kù)的操作。但是當(dāng)整個(gè)項(xiàng)目交給用戶使用時(shí),誰(shuí)使用都不知道情況下,數(shù)據(jù)源都自己定義的情況下,我們項(xiàng)目升級(jí)版本,免不了有數(shù)據(jù)庫(kù)文件變更的情況,這個(gè)時(shí)候,就靠本文介紹的flyway來(lái)控制數(shù)據(jù)庫(kù)版本了。

Flyway是一款開(kāi)源的數(shù)據(jù)庫(kù)版本管理工具,可以實(shí)現(xiàn)管理并跟蹤數(shù)據(jù)庫(kù)變更,支持?jǐn)?shù)據(jù)庫(kù)版本自動(dòng)升級(jí),而且不需要復(fù)雜的配置,能夠幫助團(tuán)隊(duì)更加方便、合理的管理數(shù)據(jù)庫(kù)變更。

例:創(chuàng)建兩個(gè)sql變更文件,項(xiàng)目啟動(dòng)后會(huì)將兩個(gè)文件中的sql語(yǔ)句全部執(zhí)行。

二、涉及到技術(shù)棧

本文演示涉及到大技術(shù)如下:

  • Spring Boot version: 2.7.12
  • Mysql version: 8.0.29
  • Mybatis-plus version: 3.3.2
  • flywaydb version: 5.2.1

demo中引入的依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.maple</groupId>
    <artifactId>maple-flyway</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>maple-flyway</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 引入web相關(guān) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--使用Mysql數(shù)據(jù)庫(kù)-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
            <version>5.2.1</version>
        </dependency>
        
        <!-- mybatis-plus的依賴 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>

        <!--Lombok管理Getter/Setter/log等-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
            <version>1.18.24</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

三、功能實(shí)現(xiàn)

本文只是為了演示實(shí)現(xiàn)思想,源碼只是一個(gè)實(shí)現(xiàn)的小demo,具體使用還是需要結(jié)合自己項(xiàng)目。

實(shí)現(xiàn)思想

直接在java工程中嵌入sql腳本。工程重新部署時(shí),會(huì)自動(dòng)更新數(shù)據(jù)庫(kù),保證數(shù)據(jù)庫(kù)與代碼同步,避免了手動(dòng)更新數(shù)據(jù)庫(kù)帶來(lái)的弊病。

flywaydb:主要是再第一次啟動(dòng)的時(shí)候創(chuàng)建flyway_schema_history表,然后去加載classpath下的文件進(jìn)行執(zhí)行,并且再表中記錄加載的版本號(hào)記錄。

具體代碼

首先創(chuàng)建一個(gè)SpringBoot項(xiàng)目,這里就不展開(kāi)贅述

添加我們的yml配置文件

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/maple?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
    driverClassName: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
  # flyway配置
  flyway:
    # 是否啟用flyway
    enabled: true
    # 編碼格式,默認(rèn)UTF-8
    encoding: UTF-8
    # 遷移sql腳本文件存放路徑,官方默認(rèn)db/migration 
    locations: classpath:db/migration
    # 遷移sql腳本文件名稱的前綴,默認(rèn)V
    sql-migration-prefix: V
    # 遷移sql腳本文件名稱的分隔符,默認(rèn)2個(gè)下劃線__ 
    sql-migration-separator: __
    # 遷移sql腳本文件名稱的后綴
    sql-migration-suffixes: .sql
    # 遷移時(shí)是否進(jìn)行校驗(yàn),默認(rèn)true  
    validate-on-migrate: true
    # 當(dāng)遷移發(fā)現(xiàn)數(shù)據(jù)庫(kù)非空且存在沒(méi)有元數(shù)據(jù)的表時(shí),自動(dòng)執(zhí)行基準(zhǔn)遷移,新建schema_version表
    baseline-on-migrate: true
    # 是否關(guān)閉要清除已有庫(kù)下的表功能,生產(chǎn)環(huán)境必須為true,否則會(huì)刪庫(kù)
    clean-disabled: true

具體的配置規(guī)則我們會(huì)在后面講到

在resources目錄下創(chuàng)建我們存放sql的目錄db/migration,這個(gè)是官方默認(rèn)的路徑,我們可以自己進(jìn)行修改調(diào)整

創(chuàng)建sql文件V20230328_01__user.sql

CREATE TABLE `maple_user`
(
    `id`        BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `user_name` VARCHAR(64) NOT NULL COMMENT '登錄賬號(hào)',
    `password`  VARCHAR(64) NOT NULL COMMENT '登錄密碼',
    PRIMARY KEY (`id`) USING BTREE
) COMMENT='用戶信息' COLLATE='utf8_general_ci' ENGINE=InnoDB;

此時(shí),整個(gè)配置就完成了,如下圖所示

SpringBoot使用flywaydb實(shí)現(xiàn)數(shù)據(jù)庫(kù)版本管理【附源碼】

四、系統(tǒng)測(cè)試

接下來(lái),我們對(duì)系統(tǒng)進(jìn)行一下測(cè)試,直接啟動(dòng)項(xiàng)目即可.

SpringBoot使用flywaydb實(shí)現(xiàn)數(shù)據(jù)庫(kù)版本管理【附源碼】

接下來(lái),我們?nèi)タ匆幌挛覀兊臄?shù)據(jù)庫(kù),可以看到生成的表,其中flyway_schema_history是flyway自動(dòng)生成的表,用于標(biāo)記sql是否執(zhí)行了,執(zhí)行結(jié)果等信息,maple_user是我們需要生成的業(yè)務(wù)表

SpringBoot使用flywaydb實(shí)現(xiàn)數(shù)據(jù)庫(kù)版本管理【附源碼】

到這里本文就結(jié)束了。

五、flyway配置講解

sql腳本命名規(guī)則

  1. 僅需要執(zhí)行一次的,以大寫(xiě)“V”開(kāi)頭,V+版本后(版本號(hào)間的數(shù)字以“.” 或者“ _ ”分隔開(kāi),“ _ ”會(huì)自動(dòng)編譯
    “ . ” )+" __"+文件描述+后綴名
  2. 需要執(zhí)行多次的,以大寫(xiě)“R”開(kāi)頭,命名如R__clean.sql ,R的腳本只要改變了就會(huì)執(zhí)行,R不帶版本號(hào)
  3. V開(kāi)頭的比R開(kāi)頭的優(yōu)先級(jí)要高。
前綴:用于版本控制(可配置)、撤消(可配置)和可重復(fù)遷移(可配置)VUR)
版本:帶有點(diǎn)或下劃線的版本可根據(jù)需要分隔任意數(shù)量的部分(不適用于可重復(fù)的遷移)
分隔符:(兩個(gè)下劃線)(可配置)__)
說(shuō)明:下劃線或空格分隔單詞
后綴:(可配置.sql)
(可選)版本控制 SQL 遷移還可以省略分隔符和說(shuō)明

flyway配置詳解

flyway.baseline-description對(duì)執(zhí)行遷移時(shí)基準(zhǔn)版本的描述.
flyway.baseline-on-migrate當(dāng)遷移時(shí)發(fā)現(xiàn)目標(biāo)schema非空,而且?guī)в袥](méi)有元數(shù)據(jù)的表時(shí),是否自動(dòng)執(zhí)
行基準(zhǔn)遷移,默認(rèn)false.
flyway.baseline-version開(kāi)始執(zhí)行基準(zhǔn)遷移時(shí)對(duì)現(xiàn)有的schema的版本打標(biāo)簽,默認(rèn)值為1.
flyway.check-location檢查遷移腳本的位置是否存在,默認(rèn)false.
flyway.clean-on-validation-error當(dāng)發(fā)現(xiàn)校驗(yàn)錯(cuò)誤時(shí)是否自動(dòng)調(diào)用clean,默認(rèn)false.
flyway.enabled是否開(kāi)啟flywary,默認(rèn)true.
flyway.encoding設(shè)置遷移時(shí)的編碼,默認(rèn)UTF-8.
flyway.ignore-failed-future-migration當(dāng)讀取元數(shù)據(jù)表時(shí)是否忽略錯(cuò)誤的遷移,默認(rèn)false.
flyway.init-sqls當(dāng)初始化好連接時(shí)要執(zhí)行的SQL.
flyway.locations遷移腳本的位置,默認(rèn)db/migration.
flyway.out-of-order是否允許無(wú)序的遷移,默認(rèn)false.
flyway.password目標(biāo)數(shù)據(jù)庫(kù)的密碼.
flyway.placeholder-prefix設(shè)置每個(gè)placeholder的前綴,默認(rèn)${.
flyway.placeholder-replacementplaceholders是否要被替換,默認(rèn)true.
flyway.placeholder-suffix設(shè)置每個(gè)placeholder的后綴,默認(rèn)}.
flyway.placeholders.[placeholder name]設(shè)置placeholder的value
flyway.schemas設(shè)定需要flywary遷移的schema,大小寫(xiě)敏感,默認(rèn)為連接默認(rèn)的schema.
flyway.sql-migration-prefix遷移文件的前綴,默認(rèn)為V.
flyway.sql-migration-separator遷移腳本的文件名分隔符,默認(rèn)__
flyway.sql-migration-suffix遷移腳本的后綴,默認(rèn)為.sql
flyway.tableflyway使用的元數(shù)據(jù)表名,默認(rèn)為schema_version
flyway.target遷移時(shí)使用的目標(biāo)版本,默認(rèn)為latest version
flyway.url遷移時(shí)使用的JDBC URL,如果沒(méi)有指定的話,將使用配置的主數(shù)據(jù)源
flyway.user遷移數(shù)據(jù)庫(kù)的用戶名
flyway.validate-on-migrate遷移時(shí)是否校驗(yàn),默認(rèn)為true

六、項(xiàng)目源碼

本文到此就結(jié)束了,如果幫助到你了,幫忙點(diǎn)個(gè)贊??

本文源碼:https://github.com/hack-feng/maple-product/tree/main/maple-flyway

SpringBoot使用用戶輸入的自定義數(shù)據(jù)源啟動(dòng)【附源碼】

我是笑小楓,全網(wǎng)皆可搜的【笑小楓】文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-468302.html

到了這里,關(guān)于SpringBoot使用flywaydb實(shí)現(xiàn)數(shù)據(jù)庫(kù)版本管理【附源碼】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot版本和Neo4j圖數(shù)據(jù)庫(kù)版本對(duì)應(yīng)關(guān)系

    Neo4j OGM Version Neo4j Version Bolt Version# Spring Data Neo4j Version Spring Boot Version 3.1.0+ 3.1.x, 3.2.x, 3.3.x 1.5.0+ (compatible with 1.4.0+) 5.1.0+ (compatible with 5.0.0+) 2.0.0+ 3.0.0+ 3.1.x, 3.2.x, 3.3.x 1.4.0+ 5.0.0+ 2.0.0+ 2.1.0+ 2.3.x, 3.0.x, 3.1.x 1.1.0+ 4.2.0+ 1.5.0+ 2.0.2+ 2.3.x, 3.0.x 1.0.0+ 4.1.2 - 4.1.6+ 1.4.x 2.0.1* 2.2.x, 2.3.x 1.0.0-

    2024年02月09日
    瀏覽(22)
  • 基于SpringBoot 2+Layui實(shí)現(xiàn)的管理后臺(tái)系統(tǒng)源碼+數(shù)據(jù)庫(kù)+安裝使用說(shuō)明

    基于SpringBoot 2+Layui實(shí)現(xiàn)的管理后臺(tái)系統(tǒng)源碼+數(shù)據(jù)庫(kù)+安裝使用說(shuō)明

    一個(gè)基于SpringBoot 2 的管理后臺(tái)系統(tǒng),包含了用戶管理,組織機(jī)構(gòu)管理,角色管理,功能點(diǎn)管理,菜單管理,權(quán)限分配,數(shù)據(jù)權(quán)限分配,代碼生成等功能 相比其他開(kāi)源的后臺(tái)系統(tǒng),SpringBoot-Plus 具有一定的復(fù)雜度 系統(tǒng)基于Spring Boot2.1技術(shù),前端采用了Layui2.4。數(shù)據(jù)庫(kù)以MySQL/Oracle

    2024年02月04日
    瀏覽(32)
  • 【SpringBoot】springboot數(shù)據(jù)使用多線程批量入數(shù)據(jù)庫(kù)

    springboot、mybatisPlus、mysql8 mysql8(部署在1核2G的服務(wù)器上,很卡,所以下面的數(shù)據(jù)條數(shù)用5000,太大怕不是要等到花兒都謝了 0.0) 共耗時(shí):180121 ms 耗時(shí)時(shí)間:87217ms 耗時(shí)時(shí)間: 28235 可見(jiàn)時(shí)間從180秒,縮短到了28秒,但是@Transactional對(duì)于多線程是控制不了所有的事務(wù)的。 Spring實(shí)現(xiàn)

    2024年02月02日
    瀏覽(24)
  • Springboot 實(shí)踐(7)springboot添加html頁(yè)面,實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)的訪問(wèn)

    Springboot 實(shí)踐(7)springboot添加html頁(yè)面,實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)的訪問(wèn)

    ????????前文講解,項(xiàng)目已經(jīng)實(shí)現(xiàn)了數(shù)據(jù)庫(kù)Dao數(shù)據(jù)接口,并通過(guò)spring security數(shù)據(jù)實(shí)現(xiàn)了對(duì)系統(tǒng)資源的保護(hù)。本文重點(diǎn)講解Dao數(shù)據(jù)接口頁(yè)面的實(shí)現(xiàn),其中涉及頁(yè)面導(dǎo)航欄、菜單欄及頁(yè)面信息欄3各部分。 1、創(chuàng)建html頁(yè)面 ????????前文講解中,資源目錄已經(jīng)建設(shè)完成,如圖

    2024年02月12日
    瀏覽(25)
  • SpringBoot實(shí)現(xiàn)Md5對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)加密

    SpringBoot實(shí)現(xiàn)Md5對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)加密

    ????????因?yàn)殚_(kāi)學(xué)等各種原因,導(dǎo)致更新的速度越來(lái)越慢,當(dāng)然在此期間也進(jìn)行了一些其他技術(shù)的學(xué)習(xí),今天給大家?guī)?lái)的就是我們的通過(guò)MD5進(jìn)行數(shù)據(jù)庫(kù)加密。 ????????MD5消息摘要算法,屬Hash算法一類(lèi)。MD5算法對(duì)輸入任意長(zhǎng)度的消息進(jìn)行運(yùn)行,產(chǎn)生一個(gè)128位的消息摘要

    2024年02月09日
    瀏覽(28)
  • boot-admin整合Liquibase實(shí)現(xiàn)數(shù)據(jù)庫(kù)版本管理

    boot-admin整合Liquibase實(shí)現(xiàn)數(shù)據(jù)庫(kù)版本管理

    Liquibase 和 Flyway 是兩款成熟的、優(yōu)秀的、開(kāi)源/商業(yè)版的數(shù)據(jù)庫(kù)版本管理工具,鑒于 Flyway 的社區(qū)版本對(duì) Oracle 數(shù)據(jù)庫(kù)支持存在限制,所以 boot-admin 選擇整合 Liquibase 提供數(shù)據(jù)庫(kù)版本管理能力支持。 Liquibase 開(kāi)源版使用 Apache 2.0 協(xié)議。 在你的項(xiàng)目進(jìn)行版本升級(jí)的時(shí)候,大概率情況

    2024年02月02日
    瀏覽(17)
  • Springboot使用DataRest直接訪問(wèn)數(shù)據(jù)庫(kù)

    Spring-boot-data-rest 直接將數(shù)據(jù)庫(kù)資源映射成為Rest資源 說(shuō)明 Spring Data REST是基于Spring Data的repository之上,可以把 repository 自動(dòng)輸出為REST資源, 目前支持Spring Data JPA、Spring Data MongoDB、Spring Data Neo4j、Spring Data GemFire、Spring Data Cassandra的 repository 自動(dòng)轉(zhuǎn)換成REST服務(wù)。 注意是自動(dòng)。

    2024年02月11日
    瀏覽(20)
  • 詳細(xì)springboot實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的整合步驟

    詳細(xì)springboot實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的整合步驟

    提示:本文適用于初學(xué)者,資深玩家仁者見(jiàn)仁智者見(jiàn)智 在家閑來(lái)無(wú)事,想起最基礎(chǔ)的spring boot項(xiàng)目,但整合jdbc,鏈接數(shù)據(jù)庫(kù)一整個(gè)操作對(duì)于初學(xué)者來(lái)說(shuō)還是有些困難,我順帶記錄一下。之后把springboot整合Mybatis和整合redis以及一些案例也寫(xiě)一下,期待成品給大家。。。。 提示

    2024年02月03日
    瀏覽(28)
  • Springboot+Redis:實(shí)現(xiàn)緩存 減少對(duì)數(shù)據(jù)庫(kù)的壓力

    Springboot+Redis:實(shí)現(xiàn)緩存 減少對(duì)數(shù)據(jù)庫(kù)的壓力

    ????歡迎光臨,終于等到你啦???? ??我是蘇澤,一位對(duì)技術(shù)充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 Redis實(shí)戰(zhàn)與進(jìn)階 本專欄講解Redis從原理到實(shí)踐 這是蘇澤的個(gè)人主頁(yè)可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.csdn.net/ ? 目錄 緩存如何實(shí)現(xiàn)?

    2024年03月24日
    瀏覽(19)
  • Springboot+vue 實(shí)現(xiàn)圖片上傳至數(shù)據(jù)庫(kù)并顯示

    Springboot+vue 實(shí)現(xiàn)圖片上傳至數(shù)據(jù)庫(kù)并顯示

    前端是Vue + Element-UI 采用el-upload組件(借鑒官方)上傳圖片: action 在這里可以隨便設(shè)置,因?yàn)樵诤竺嬗?:http-request 去自己設(shè)置請(qǐng)求,注意由于是自己寫(xiě)請(qǐng)求需要 :auto-upload=“false” ,并且由于是前后端連接要解決跨域問(wèn)題,所以在 $hostURL+imageUrl 定義了一個(gè)全局變量: 在meth

    2024年02月07日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包