国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

SpringBoot + Flyway,自動化實現數據庫版本控制

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

掃碼添加小助手

加入工程師交流群


為什么使用Flyway

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

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

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

Flyway已經支持數據庫包括: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 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址: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.創建SpringBoot應用,并添加flyway-core依賴,本例中將實現初始化腳本到mysql數據庫,因此同時引入了驅動依賴 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第一次運行時,會在我們對應的數據庫中新建一個記錄腳本運行情況的
spring.flyway.table=flyway_schema_history

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

# flyway指向的數據庫鏈接
spring.datasource.url=jdbc//127.0.0.1:3306/runoob?useUnicode=true&characterEncoding=utf8
# 用戶名
spring.flyway.user=nacos
# 密碼
spring.flyway.password=nacos
# 數據庫驅動
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 目錄中存放腳本文件,腳本名稱命名方式

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

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

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

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

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

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]

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

2.3 源碼參考

https://github.com/PNZBEIJINGL/springboot

總結

本文介紹了Springboot集成flyway方式

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


審核編輯 :李倩


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

    關注

    31

    文章

    5933

    瀏覽量

    90226
  • 數據庫
    +關注

    關注

    7

    文章

    4020

    瀏覽量

    68340
  • spring
    +關注

    關注

    0

    文章

    341

    瀏覽量

    15935
  • SpringBoot
    +關注

    關注

    0

    文章

    177

    瀏覽量

    686

原文標題:SpringBoot + Flyway,自動化實現數據庫版本控制

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    恒訊科技解析:如何安裝MySQL并創建數據庫

    安裝和管理MySQL不必復雜。只需幾分鐘,你就能在Linux服務器上搭建MySQL,創建第一個數據庫,甚至自動化備份——同時確保數據安全有序。 什么是 MySQL? MySQL 是一個關系型
    的頭像 發表于 01-14 14:25 ?176次閱讀

    如何使用SpringBoot、Vue2.0、MySQL開發一套云診所系統?

    SpringBoot是Java領域非常流行的快速開發框架,提供了豐富的生態和自動化配置,適合構建微服務和單體應用。 它可以很好地處理業務邏輯、數據持久、安全性(Spring Sec
    的頭像 發表于 11-27 16:02 ?285次閱讀
    如何使用<b class='flag-5'>SpringBoot</b>、Vue2.0、MySQL開發一套云診所系統?

    PLC數據保存到MySQL數據庫解決方案

    在工業自動化領域,PLC(可編程邏輯控制器)作為核心控制設備,實時產生大量關鍵生產數據,如設備運行參數、工藝指標、故障信息等。這些數據是企業
    的頭像 發表于 09-30 16:50 ?1578次閱讀
    PLC<b class='flag-5'>數據</b>保存到MySQL<b class='flag-5'>數據庫</b>解決方案

    mysql數據恢復—mysql數據庫表被truncate的數據恢復案例

    某云ECS網站服務器,linux操作系統,部署了mysql數據庫。工作人員在執行數據庫版本更新測試時,錯誤地將本應在測試執行的sql腳本在生產
    的頭像 發表于 09-11 09:28 ?872次閱讀
    mysql<b class='flag-5'>數據</b>恢復—mysql<b class='flag-5'>數據庫</b>表被truncate的<b class='flag-5'>數據</b>恢復案例

    【技巧合集】labview使用單機數據庫sqllite

    【Labview技巧合集】12 labview中使用單機數據庫 sqllite 配套工具包及單機工具 和例程已上傳個人網站#labview類#Labview#labview框架#工業自動化#上位機#自動化測試#計算機畢業設計
    發表于 09-07 19:47

    宏集案例 | Cogent DataHub: 高效實現風電場數據集中管理與自動化

    安全、實時的上傳至中心SCADA系統和Pi數據庫。這一解決方案實現了與現有系統的無縫集成、自動化計費,并大幅提升數據準確性,為風電場的高效管理奠定了基
    的頭像 發表于 08-08 18:29 ?599次閱讀
    宏集案例 | Cogent DataHub: 高效<b class='flag-5'>實現</b>風電場<b class='flag-5'>數據</b>集中管理與<b class='flag-5'>自動化</b>

    數據庫數據恢復—服務器異常斷電導致Oracle數據庫故障的數據恢復案例

    Oracle數據庫故障: 某公司一臺服務器上部署Oracle數據庫。服務器意外斷電導致數據庫報錯,報錯內容為“system01.dbf需要更多的恢復來保持一致性”。該Oracle數據庫
    的頭像 發表于 07-24 11:12 ?638次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—服務器異常斷電導致Oracle<b class='flag-5'>數據庫</b>故障的<b class='flag-5'>數據</b>恢復案例

    多摩川編碼器:助力自動化控制系統實現更精準的運動控制

    在當今高度自動化的工業生產和先進科技領域,精準的運動控制是眾多設備和系統穩定、高效運行的關鍵。多摩川編碼器作為一種關鍵的測量和反饋裝置,正憑借其卓越的性能,在自動化控制系統中發揮著至關
    的頭像 發表于 07-21 16:54 ?612次閱讀

    數據庫數據恢復—MongoDB數據庫文件丟失的數據恢復案例

    將MongoDB數據庫文件拷貝到其他分區,數據復制完成后將MongoDB數據庫原先所在的分區進行了格式操作。 結果發現拷貝過去的數據無法
    的頭像 發表于 07-01 11:13 ?638次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—MongoDB<b class='flag-5'>數據庫</b>文件丟失的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—SQL Server數據庫被加密如何恢復數據

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

    SQLSERVER數據庫是什么

    SQL Server 是由微軟公司開發的一款 關系型數據庫管理系統(RDBMS) ,用于存儲、管理和檢索結構數據。它是企業級應用中廣泛使用的數據庫解決方案之一,尤其適用于Window
    的頭像 發表于 05-26 09:19 ?1169次閱讀

    MySQL數據庫是什么

    MySQL數據庫是一種 開源的關系型數據庫管理系統(RDBMS) ,由瑞典MySQL AB公司開發,后被Oracle公司收購。它通過結構查詢語言(SQL)進行數據存儲、管理和操作,廣
    的頭像 發表于 05-23 09:18 ?1206次閱讀

    不用編程不用聯網,PLC和儀表直接對SQL接數據庫,有異常時還可先將數據緩存

    不用PLC編程也不用聯網,還不用電腦,采用IGT-DSER智能網關實現PLC和儀表直接對SQL接數據庫。 跟服務端通訊有異常時還可以先將數據暫存,待故障解除后自動重新上報到
    發表于 04-12 10:47

    數據庫數據恢復——MongoDB數據庫文件拷貝后服務無法啟動的數據恢復

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

    中興通訊GoldenDB數據庫助力首個住房公積金國產數據庫聯合實驗室落地揚州

    領域的國產數據庫聯合實驗室成功落地,雙方將圍繞GoldenDB數據庫在公積金核心系統的深度應用展開技術攻關,為全國公積金行業數字轉型提供示范樣本。 ? 為什么住房公積金數字轉型如此
    的頭像 發表于 04-07 18:26 ?1206次閱讀