一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

SpringBoot + Flyway,自動化實(shí)現(xiàn)數(shù)據(jù)庫版本控制

jf_ro2CN3Fa ? 來源:CSDN ? 作者:CSDN ? 2022-12-02 14:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


為什么使用Flyway

最簡單的一個(gè)項(xiàng)目是一個(gè)軟件連接到一個(gè)數(shù)據(jù)庫,但是大多數(shù)項(xiàng)目中我們不僅要處理我們開發(fā)環(huán)境的副本,還需要處理其他很多副本。例如:開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境。想到數(shù)據(jù)庫管理,我們立刻就能想到一系列問題

  • 如何快速收集執(zhí)行腳本的清單
  • 執(zhí)行的腳本總要人工執(zhí)行,是否可以通過機(jī)器執(zhí)行
  • 執(zhí)行的腳本是否已經(jīng)在數(shù)據(jù)庫執(zhí)行過
  • 執(zhí)行的腳本是否全部在數(shù)據(jù)庫中執(zhí)行過
  • 執(zhí)行的腳本如何回退
  • 如何初始化一個(gè)空數(shù)據(jù)庫實(shí)例

Flyway是一款數(shù)據(jù)庫版本控制管理工具,它可以簡單的、可靠的升級你的數(shù)據(jù)庫。它能幫助解決上面的問題。Flyway核心是記錄所有版本演化和狀態(tài)的MetaData,首次啟動創(chuàng)建默認(rèn)名為SCHEMA_VERSION的元素表。表中保存了版本,描述,要執(zhí)行的sql腳本等信息。

Flyway已經(jīng)支持?jǐn)?shù)據(jù)庫包括:Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoeni

官網(wǎng)鏈接:https://flywaydb.org/

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

SpringBoot集成Flyway

2.1 簡單示例

參考版本信息

7bf71424-7207-11ed-8abf-dac502259ad0.png

參考目錄結(jié)構(gòu)

7c111e8c-7207-11ed-8abf-dac502259ad0.png

1.創(chuàng)建SpringBoot應(yīng)用,并添加flyway-core依賴,本例中將實(shí)現(xiàn)初始化腳本到mysql數(shù)據(jù)庫,因此同時(shí)引入了驅(qū)動依賴 mysql-connector-java

<dependency>
<groupId>org.flywaydbgroupId>
<artifactId>flyway-coreartifactId>
<version>7.15.0version>
dependency>

參考pom.xml依賴如下

<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>

<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.28version>
dependency>

<dependency>
<groupId>org.flywaydbgroupId>
<artifactId>flyway-coreartifactId>
<version>7.15.0version>
dependency>

<dependency>
<groupId>org.junit.jupitergroupId>
<artifactId>junit-jupiter-apiartifactId>
<version>5.8.2version>
<scope>testscope>
dependency>

dependencies>

2.在application.properties中設(shè)置flyway信息

server.port=7002

##是否啟動,默認(rèn)開啟
spring.flyway.enabled = true
##腳本存放路徑
spring.flyway.locations = classpath:db/migration
##當(dāng)flyway第一次運(yùn)行時(shí),會在我們對應(yīng)的數(shù)據(jù)庫中新建一個(gè)記錄腳本運(yùn)行情況的
spring.flyway.table=flyway_schema_history

> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
>
> * 項(xiàng)目地址:
> * 視頻教程

# flyway指向的數(shù)據(jù)庫鏈接
spring.datasource.url=jdbc//127.0.0.1:3306/runoob?useUnicode=true&characterEncoding=utf8
# 用戶名
spring.flyway.user=nacos
# 密碼
spring.flyway.password=nacos
# 數(shù)據(jù)庫驅(qū)動
spring.flyway.driver-class-name=com.mysql.cj.jdbc.Driver

3.腳本整理

將腳本整理到resource/db.migration路徑下,例如

7c2b9b5e-7207-11ed-8abf-dac502259ad0.png

參考SQL腳本信息如下

//V1.20190621.1854__CREATE_PERSION_TABLE.sql腳本內(nèi)容
createtablePERSON(
IDintnotnull,
NAMEvarchar(100)notnull
);

//V1.20190621.1904__INIT_PERSION.sql腳本內(nèi)容
insertintoPERSON(ID,NAME)values(1,'Axel');
insertintoPERSON(ID,NAME)values(2,'Mr.Foo');
insertintoPERSON(ID,NAME)values(3,'Ms.Bar');

sql 目錄中存放腳本文件,腳本名稱命名方式

  • 版本化遷移 :執(zhí)行一遍,版本號唯一,有重復(fù)會報(bào)錯(cuò):格式:V+版本號 +雙下劃線+描述+結(jié)束符
  • 重復(fù)的遷移 ,不需要版本號,腳本發(fā)生變化啟動就會執(zhí)行:格式:R+雙下劃線+描述+結(jié)束符
  • 撤消遷移 :格式:U+版本號 +雙下劃線+描述+結(jié)束符
7c43493e-7207-11ed-8abf-dac502259ad0.png

4.運(yùn)行啟動主類,運(yùn)行日志如下,從日志中可以看到如下信息

  • 啟動后正確鏈接到數(shù)據(jù)庫runoob
  • 驗(yàn)證2個(gè)遷移腳本成功
  • 使用命令行的方式創(chuàng)建了一張名稱為 flyway_schema_history 的記錄表,這里要注意,所有腳本一旦執(zhí)行了就會在 flyway_schema_history中創(chuàng)建記錄, 如果出錯(cuò)引發(fā)問題,可以刪除表中記錄,反正啟動的時(shí)候還會再執(zhí)行,當(dāng)然生產(chǎn)環(huán)境不建議此方法,但生產(chǎn)環(huán)境上部署的包都是驗(yàn)證過無問題的包也不會出現(xiàn)此問題
  • 執(zhí)行了resource/db.migration 目錄下的兩個(gè)腳本,并執(zhí)行成功
INFO190688---[main]o.f.c.internal.license.VersionPrinter:FlywayCommunityEdition7.15.0byRedgate
INFO190688---[main]o.f.c.i.database.base.BaseDatabaseType:Database:jdbc//127.0.0.1:3306/runoob(MySQL5.7)
INFO190688---[main]o.f.core.internal.command.DbValidate:Successfullyvalidated2migrations(executiontime00:00.016s)
INFO190688---[main]o.f.c.i.s.JdbcTableSchemaHistory:CreatingSchemaHistorytable`runoob`.`flyway_schema_history`withbaseline...
INFO190688---[main]o.f.core.internal.command.DbBaseline:Successfullybaselinedschemawithversion:1
INFO190688---[main]o.f.core.internal.command.DbMigrate:Currentversionofschema`runoob`:1
INFO190688---[main]o.f.core.internal.command.DbMigrate:Migratingschema`runoob`toversion"1.20190621.1854-CREATEPERSIONTABLE"
INFO190688---[main]o.f.core.internal.command.DbMigrate:Migratingschema`runoob`toversion"1.20190621.1904-INITPERSION"
INFO190688---[main]o.f.core.internal.command.DbMigrate:Successfullyapplied2migrationstoschema`runoob`,nowatversionv1.20190621.1904(executiontime00:00.225s)

停止服務(wù)后,重新運(yùn)行日志如下,從日志中可以看到信息

  • 啟動后正確鏈接到數(shù)據(jù)庫runoob
  • 驗(yàn)證2個(gè)遷移腳本成功
  • 本次沒有重復(fù)執(zhí)行腳本, 日志中打印當(dāng)前腳本編號20190621.1904, 即最后1次執(zhí)行的腳本
INFO193184---[main]o.f.c.internal.license.VersionPrinter:FlywayCommunityEdition7.15.0byRedgate
INFO193184---[main]o.f.c.i.database.base.BaseDatabaseType:Database:jdbc//127.0.0.1:3306/runoob(MySQL5.7)
INFO193184---[main]o.f.core.internal.command.DbValidate:Successfullyvalidated3migrations(executiontime00:00.024s)
INFO193184---[main]o.f.core.internal.command.DbMigrate:Currentversionofschema`runoob`:1.20190621.1904
INFO193184---[main]o.f.core.internal.command.DbMigrate:Schema`runoob`isuptodate.Nomigrationnecessary.

查看Mysql數(shù)據(jù)庫

7c677750-7207-11ed-8abf-dac502259ad0.png

2.2 常見問題

1.Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema(s)

Causedby:org.flywaydb.core.api.FlywayException:Foundnon-emptyschema(s)`runoob`butnoschemahistorytable.Usebaseline()orsetbaselineOnMigratetotruetoinitializetheschemahistorytable.
atorg.flywaydb.core.Flyway$1.execute(Flyway.java:200)~[flyway-core-7.15.0.jar:na]
atorg.flywaydb.core.Flyway$1.execute(Flyway.java:170)~[flyway-core-7.15.0.jar:na]
atorg.flywaydb.core.Flyway.execute(Flyway.java:586)~[flyway-core-7.15.0.jar:na]

問題原因:第一執(zhí)行的時(shí)候沒有找到schema history table ,這張表其實(shí)就是application.properties文件中spring.flyway.table屬性配置的表,因此要么使用命令創(chuàng)建一個(gè)或者在application.properties文件中設(shè)置 spring.flyway.baseline-on-migrate=true,

2.Caused by: org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 5.7

Causedby:org.flywaydb.core.api.FlywayException:UnsupportedDatabase:MySQL5.7
atorg.flywaydb.core.internal.database.DatabaseTypeRegister.getDatabaseTypeForConnection(DatabaseTypeRegister.java:106)~[flyway-core-8.4.2.jar:na]
atorg.flywaydb.core.internal.jdbc.JdbcConnectionFactory.(JdbcConnectionFactory.java:75)~[flyway-core-8.4.2.jar:na]
atorg.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:143)~[flyway-core-8.4.2.jar:na]
atorg.flywaydb.core.Flyway.migrate(Flyway.java:124)~[flyway-core-8.4.2.jar:na]

問題原因:flyway-core對數(shù)據(jù)庫版本有要求,例如flyway-core的當(dāng)前最高版本V8.4.3,不能使用 MySQL 5.7, 當(dāng)flyway-core 降低到V7.15.0后 問題解決,所以匹配flyway-core和數(shù)據(jù)庫版本后問題即可解決

2.3 源碼參考

https://github.com/PNZBEIJINGL/springboot

總結(jié)

本文介紹了Springboot集成flyway方式

  • 使用Flyway之前部署腳本方式一般為開發(fā)人員按照順序匯總數(shù)據(jù)庫的升級腳, 然后DBA或者售后在生產(chǎn)庫中按照順序執(zhí)行升級腳本。
  • 使用Flyway之后部署腳本方式就變更為開發(fā)人員將腳本構(gòu)建到程序包中, 部署程序包后啟動時(shí)Flyway自動執(zhí)行腳本升級


審核編輯 :李倩


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

    關(guān)注

    29

    文章

    5762

    瀏覽量

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

    關(guān)注

    7

    文章

    3907

    瀏覽量

    65958
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14965
  • SpringBoot
    +關(guān)注

    關(guān)注

    0

    文章

    175

    瀏覽量

    359

原文標(biāo)題:SpringBoot + Flyway,自動化實(shí)現(xiàn)數(shù)據(jù)庫版本控制

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫故障: SQL Server數(shù)據(jù)庫被加密,無法使用。 數(shù)據(jù)庫MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?56次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)庫</b>被加密如何恢復(fù)<b class='flag-5'>數(shù)據(jù)</b>?

    MySQL數(shù)據(jù)庫是什么

    MySQL數(shù)據(jù)庫是一種 開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS) ,由瑞典MySQL AB公司開發(fā),后被Oracle公司收購。它通過結(jié)構(gòu)查詢語言(SQL)進(jìn)行數(shù)據(jù)存儲、管理和操作,廣
    的頭像 發(fā)表于 05-23 09:18 ?340次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)庫文件拷貝后服務(wù)無法啟動的數(shù)據(jù)恢復(fù)

    文件。將MongoDB數(shù)據(jù)庫文件拷貝到其他分區(qū)后,對MongoDB數(shù)據(jù)庫所在原分區(qū)進(jìn)行了格式操作。格式完成后將數(shù)據(jù)庫文件拷回原分區(qū),并重
    的頭像 發(fā)表于 04-09 11:34 ?261次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)——MongoDB<b class='flag-5'>數(shù)據(jù)庫</b>文件拷貝后服務(wù)無法啟動的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)

    分布式云數(shù)據(jù)庫有哪些類型

    分布式云數(shù)據(jù)庫有哪些類型?分布式云數(shù)據(jù)庫主要類型包括:關(guān)系型分布式數(shù)據(jù)庫、非關(guān)系型分布式數(shù)據(jù)庫
    的頭像 發(fā)表于 01-15 09:43 ?447次閱讀

    Oracle數(shù)據(jù)庫的多功能集成開發(fā)環(huán)境

    Oracle數(shù)據(jù)庫的多功能集成開發(fā)環(huán)境 快捷菜單中的可視對象編輯器 上下文感知的SQL代碼補(bǔ)全、智能格式和重構(gòu) 逐步執(zhí)行的自動調(diào)試功能 多功能數(shù)
    的頭像 發(fā)表于 01-14 13:52 ?371次閱讀
    Oracle<b class='flag-5'>數(shù)據(jù)庫</b>的多功能集成開發(fā)環(huán)境

    數(shù)據(jù)庫是哪種數(shù)據(jù)庫類型?

    數(shù)據(jù)庫是一種部署在虛擬計(jì)算環(huán)境中的數(shù)據(jù)庫,它融合了云計(jì)算的彈性和可擴(kuò)展性,為用戶提供高效、靈活的數(shù)據(jù)庫服務(wù)。云數(shù)據(jù)庫主要分為兩大類:關(guān)系型數(shù)據(jù)庫
    的頭像 發(fā)表于 01-07 10:22 ?476次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Mysql數(shù)據(jù)庫表記錄丟失的數(shù)據(jù)恢復(fù)流程

    Mysql數(shù)據(jù)庫故障: Mysql數(shù)據(jù)庫表記錄丟失。 Mysql數(shù)據(jù)庫故障表現(xiàn): 1、Mysql數(shù)據(jù)庫表中無任何數(shù)據(jù)或只有部分
    的頭像 發(fā)表于 12-16 11:05 ?565次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—Mysql<b class='flag-5'>數(shù)據(jù)庫</b>表記錄丟失的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)流程

    AI時(shí)代的數(shù)據(jù)庫技術(shù)發(fā)展論壇亮點(diǎn)前瞻

    可以看到,數(shù)據(jù)庫技術(shù)作為數(shù)字經(jīng)濟(jì)的基石,在全球范圍內(nèi)正經(jīng)歷著由傳統(tǒng)架構(gòu)向云原生、智能的轉(zhuǎn)型。而AI技術(shù)的融入,使得數(shù)據(jù)庫系統(tǒng)在性能優(yōu)化、自動化管理、智能決策等方面展現(xiàn)出前所未有的潛力
    的頭像 發(fā)表于 12-12 11:31 ?544次閱讀

    LMX2595EVM如何實(shí)現(xiàn)自動化控制?

    我需要用LMX2595EVM實(shí)現(xiàn)自動化控制,請問那里有LMX2595EVM相關(guān)的sdk接口文檔或者Demo?
    發(fā)表于 11-13 06:09

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—通過拼接數(shù)據(jù)庫碎片恢復(fù)SQLserver數(shù)據(jù)庫

    一個(gè)運(yùn)行在存儲上的SQLServer數(shù)據(jù)庫,有1000多個(gè)文件,大小幾十TB。數(shù)據(jù)庫每10天生成一個(gè)NDF文件,每個(gè)NDF幾百GB大小。數(shù)據(jù)庫包含兩個(gè)LDF文件。 存儲損壞,數(shù)據(jù)庫
    的頭像 發(fā)表于 10-31 13:21 ?653次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—通過拼接<b class='flag-5'>數(shù)據(jù)庫</b>碎片恢復(fù)SQLserver<b class='flag-5'>數(shù)據(jù)庫</b>

    數(shù)據(jù)庫可以租用嗎?完整租用流程來了

    數(shù)據(jù)庫是可以租用的,這是一種合法且便捷的數(shù)據(jù)存儲和管理方式。云數(shù)據(jù)庫是云服務(wù)提供商提供的各種服務(wù)的關(guān)系型數(shù)據(jù)庫(如RDS)、文檔
    的頭像 發(fā)表于 10-28 09:54 ?470次閱讀

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

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

    干貨分享 如何采集OPC DA數(shù)據(jù)并存儲到SQL Server數(shù)據(jù)庫?

    在工業(yè)自動化系統(tǒng)中,將OPC DA數(shù)據(jù)采集并存儲到SQL Server數(shù)據(jù)庫具有顯著的應(yīng)用價(jià)值。本文手把手教您完成這一操作,實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)一管
    的頭像 發(fā)表于 08-09 10:46 ?1139次閱讀
    干貨分享  如何采集OPC DA<b class='flag-5'>數(shù)據(jù)</b>并存儲到SQL Server<b class='flag-5'>數(shù)據(jù)庫</b>?

    機(jī)械自動化和電氣自動化區(qū)別是什么

    機(jī)械自動化和電氣自動化是現(xiàn)代工業(yè)生產(chǎn)中兩個(gè)重要的領(lǐng)域,它們在許多方面有著密切的聯(lián)系,但也存在一些明顯的區(qū)別。 一、基本概念 機(jī)械自動化 機(jī)械自動化是指利用機(jī)械設(shè)備、傳感器、
    的頭像 發(fā)表于 07-01 09:33 ?7181次閱讀

    機(jī)械自動化自動化的一種嗎

    引言 自動化技術(shù)是指利用控制裝置對生產(chǎn)過程進(jìn)行控制,以實(shí)現(xiàn)生產(chǎn)過程的自動化。機(jī)械自動化
    的頭像 發(fā)表于 07-01 09:32 ?2441次閱讀