在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

jf_ro2CN3Fa ? 來源:CSDN ? 作者:CSDN ? 2022-12-02 14:26 ? 次閱讀


為什么使用Flyway

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

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

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

Flyway已經支持數(shù)據庫包括: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

官網鏈接:https://flywaydb.org/

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

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

SpringBoot集成Flyway

2.1 簡單示例

參考版本信息

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

參考目錄結構

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

1.創(chuàng)建SpringBoot應用,并添加flyway-core依賴,本例中將實現(xiàn)初始化腳本到mysql數(shù)據庫,因此同時引入了驅動依賴 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中設置flyway信息

server.port=7002

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

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

# flyway指向的數(shù)據庫鏈接
spring.datasource.url=jdbc//127.0.0.1:3306/runoob?useUnicode=true&characterEncoding=utf8
# 用戶名
spring.flyway.user=nacos
# 密碼
spring.flyway.password=nacos
# 數(shù)據庫驅動
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腳本內容
createtablePERSON(
IDintnotnull,
NAMEvarchar(100)notnull
);

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

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

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

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

  • 啟動后正確鏈接到數(shù)據庫runoob
  • 驗證2個遷移腳本成功
  • 使用命令行的方式創(chuàng)建了一張名稱為 flyway_schema_history 的記錄表,這里要注意,所有腳本一旦執(zhí)行了就會在 flyway_schema_history中創(chuàng)建記錄, 如果出錯引發(fā)問題,可以刪除表中記錄,反正啟動的時候還會再執(zhí)行,當然生產環(huán)境不建議此方法,但生產環(huán)境上部署的包都是驗證過無問題的包也不會出現(xiàn)此問題
  • 執(zhí)行了resource/db.migration 目錄下的兩個腳本,并執(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)

停止服務后,重新運行日志如下,從日志中可以看到信息

  • 啟動后正確鏈接到數(shù)據庫runoob
  • 驗證2個遷移腳本成功
  • 本次沒有重復執(zhí)行腳本, 日志中打印當前腳本編號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ù)據庫

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í)行的時候沒有找到schema history table ,這張表其實就是application.properties文件中spring.flyway.table屬性配置的表,因此要么使用命令創(chuàng)建一個或者在application.properties文件中設置 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ù)據庫版本有要求,例如flyway-core的當前最高版本V8.4.3,不能使用 MySQL 5.7, 當flyway-core 降低到V7.15.0后 問題解決,所以匹配flyway-core和數(shù)據庫版本后問題即可解決

2.3 源碼參考

https://github.com/PNZBEIJINGL/springboot

總結

本文介紹了Springboot集成flyway方式

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


審核編輯 :李倩


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

    關注

    29

    文章

    5575

    瀏覽量

    79272
  • 數(shù)據庫
    +關注

    關注

    7

    文章

    3799

    瀏覽量

    64388
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    14343
  • SpringBoot
    +關注

    關注

    0

    文章

    173

    瀏覽量

    178

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

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    機械自動化自動化的一種嗎

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

    工業(yè)自動化中的控制方式

    工業(yè)自動化是現(xiàn)代工業(yè)發(fā)展的重要標志,它極大地提高了生產效率,降低了生產成本,并改善了產品質量。在工業(yè)自動化中,控制方式作為實現(xiàn)自動化
    的頭像 發(fā)表于 06-17 11:41 ?814次閱讀

    如何實現(xiàn)PLC的自動化控制邏輯

    在工業(yè)自動化領域,PLC(Programmable Logic Controller,可編程邏輯控制器)扮演著至關重要的角色。PLC通過編程實現(xiàn)自動化
    的頭像 發(fā)表于 06-15 16:44 ?1182次閱讀

    機械制造與自動化自動化類嗎

    機械制造與自動化自動化領域的一個重要分支,它涉及到機械設計、制造、檢測、控制等多個方面,是現(xiàn)代制造業(yè)的核心組成部分。 機械制造與自動化是指利用計算機、機器人、傳感器等
    的頭像 發(fā)表于 06-11 11:18 ?1524次閱讀

    工廠自動化控制的典型實現(xiàn)方式

    架構設計 傳感器與執(zhí)行器的應用 控制器與控制策略 人機交互界面 數(shù)據采集與分析 通信與網絡技術 安全與可靠性 系統(tǒng)集成與優(yōu)化 系統(tǒng)架構設計 工廠自動化
    的頭像 發(fā)表于 06-06 15:51 ?1061次閱讀

    數(shù)據庫數(shù)據恢復】Oracle數(shù)據庫ASM實例無法掛載的數(shù)據恢復案例

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

    三菱plc數(shù)據采集并存入數(shù)據庫

    采集,并將采集的數(shù)據存入數(shù)據庫中。 首先,我們需要明確數(shù)據采集的目的。在工業(yè)自動化中,數(shù)據采集的目的通常是為了監(jiān)測和
    的頭像 發(fā)表于 01-02 17:04 ?2349次閱讀
    主站蜘蛛池模板: 免费aa| 97涩涩涩| 亚洲一区欧美二区| 日韩操| 亚洲成人精品| 全色网站| 天天操天天干天天| 日本一道高清不卡免费| 欧美性另类69xxx| 天堂网在线www资源网| 亚洲欧美一区二区三区另类 | 精品亚洲欧美无人区乱码| 高清国产下药迷倒美女| 国产片18在线观看| 一区二区三区高清视频在线观看 | 让她爽的喷水叫爽乱| 天天爽夜夜爽人人爽免费| 日本欧美一区二区免费视| 免费永久欧美性色xo影院| 奇米影视狠狠| 亚洲成人网在线播放| 日本免费成人| 手机看片福利久久| 最近2018年在线中文字幕高清| 老色批视频| 国产大片黄在线观看| 很黄很污小说| 国产激烈床戏无遮挡观看| 欧美性精品| 欧美freesex交| 久久精品国产99精品国产2021| 亚洲精品色一区色二区色三区| www.色播.com| 亚洲女同一区二区| 久久精品亚洲精品国产色婷| 国产成人午夜片在线观看| 天堂成人一区二区三区| 天天上天天干| 一级做a爰片久久毛片免费| 农村女人的一级毛片| 黄色综合|