<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Springboot集成flyway實現(xiàn)數(shù)據(jù)庫自動遷徙

          共 4380字,需瀏覽 9分鐘

           ·

          2021-03-29 04:27

          點擊藍色字關(guān)注我們!




          一個努力中的公眾號

          長的好看的人都關(guān)注了

          前言

              Flyway是一款管理并跟蹤數(shù)據(jù)庫遷移(migrate)的數(shù)據(jù)庫版本管理工具。它可以像SVN管理不同人的代碼那樣,管理不同人的sql腳本,從而做到數(shù)據(jù)庫同步。

              它可以幫助我們在不同環(huán)境保持數(shù)據(jù)庫的同步,減少手工操作,同時也減少了遺漏的機會。

              Flyway可以集成在項目中,可以與Spring 框結(jié)合。在項目發(fā)版時,自動執(zhí)行數(shù)據(jù)庫腳本,無需人為執(zhí)行數(shù)據(jù)庫同步操作。

          1.添加flywaymaven添加依賴

          <!-- flyway-->
          <dependency>
          <groupId>
          org.flywaydb</groupId>
          <artifactId>
          flyway-core</artifactId>
          <version>
          5.2.1</version>
          </dependency>

          將上面的依賴添加到主項目的pom.xml中

          2. 在application.yml 配置文件中配置flyway相關(guān)配置

          需要注意的是,flyway配置放在spring配置下、根據(jù)自己實際情況配置相關(guān)參數(shù)

          # flyway 配置
          flyway:
          # 執(zhí)行基線時用來標記已有Schema的版本.(默認值:1)
          baseline-version: 1
          # 開啟Flyway(默認true)
          enabled: true
          # SQL遷移的文件名前綴(默認值為V 可以不設(shè)置)
          sql-migration-prefix: V
          # 遷移sql腳本文件名稱的分隔符(默認2個下劃線__)
          sqlMigrationSeparator: __
          # SQL遷移的文件名后綴(默認值:.sql 可以不設(shè)置)
          sql-migration-suffixes: .sql
          # 遷移時是否進行校驗,默認true
          validateOnMigrate: true
          # 在沒有元數(shù)據(jù)表的情況下,針對非空Schema執(zhí)行遷移時是否自動調(diào)用基線。
          baseline-on-migrate: true
          # 遷移腳本的位置(默認為classpath:db/migration)
          locations: classpath:db/migration
          # 數(shù)據(jù)庫連接配置
          url: ${spring.datasource.dynamic.datasource.master.url}
          user: ${spring.datasource.dynamic.datasource.master.username}
          password: ${spring.datasource.dynamic.datasource.master.password}
          # 需要升級的數(shù)據(jù)庫實例名
          schemas: jeecg-boot
          # 編碼格式
          encoding: UTF-8
          # 忽略腳本順序:開發(fā)環(huán)境應(yīng)該設(shè)置trueflyway將能加載漏掉的老版本SQL文件 生成環(huán)境需要設(shè)置false
          out-of-order: true
          # 發(fā)生驗證的錯誤時是否執(zhí)行clean操作(如SQL執(zhí)行失敗),默認false,生產(chǎn)中必須使用false
          clean-on-validation-error: true
          # 是否禁用clean操作,默認false,生產(chǎn)中必須使用true
          clean-disabled: false

          Springboot flyway配置說明

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


          3.在遷移腳本的文件夾中創(chuàng)建對應(yīng)sql腳本


          寫入相關(guān)sql語句


            SpringBoot應(yīng)用運行時flyway會根據(jù)腳本進行數(shù)據(jù)庫的初始化,執(zhí)行的順序會根據(jù)腳本版本號由低到高按順序執(zhí)行(1.0 -> 1.0.1 -> 1.0.2),每執(zhí)行完一個版本腳本都會向記錄表flyway_history_schema插入一條數(shù)據(jù)。

           若添加了新的版本腳本,應(yīng)用啟動時flyway會根據(jù)腳本文件版本到記錄表flyway_history_schema查詢是否有對應(yīng)的版本腳本被執(zhí)行了,如果沒有相應(yīng)的版本腳本記錄才會執(zhí)行腳本。
           
          不過需要注意:flyway不支持版本回滾。(需手動,比較悲劇的一點)、所以需要準備兩份sql,如果遷移的sql執(zhí)行成功后需要回滾,就執(zhí)行對應(yīng)的回滾sql,如果遷移失敗,flyway可以通過注解執(zhí)行回滾。


          4.啟動了SpringBoot項目后,就會自動幫你執(zhí)行SQL文件

           執(zhí)行歷史可以在 flyway_schema_history 表中查看、已經(jīng)執(zhí)行過的遷移sql就不會再執(zhí)行,主要是在這個歷史表中控制,如果需要重新執(zhí)行,那么刪除對應(yīng)版本及以后的執(zhí)行歷史重啟項目就會重新執(zhí)行對應(yīng)腳本

          刷新對應(yīng)數(shù)據(jù)庫,就可以看到通過遷移腳本生成的表結(jié)構(gòu)。


          使用總結(jié)


              我們是在中途嘗試使用flyway,所以開發(fā)環(huán)境會有一個已存在的數(shù)據(jù)庫。我們需要從開發(fā)環(huán)境中導(dǎo)出數(shù)據(jù)庫腳本,并對開發(fā)環(huán)境數(shù)據(jù)庫進行baseline標記。導(dǎo)出的腳本可用于新環(huán)境的部署。

              如果我們已經(jīng)有了生產(chǎn)環(huán)境,而且生產(chǎn)環(huán)境和開發(fā)環(huán)境的數(shù)據(jù)庫已經(jīng)有了較大的差異。暫時可以想到的方案大概有2個方案:

          方案一:

             在生產(chǎn)環(huán)境備份數(shù)據(jù)庫,然后創(chuàng)建一個全新的數(shù)據(jù)庫,手動將備份庫里的數(shù)據(jù)導(dǎo)入到新的數(shù)據(jù)庫。

          方案二:

             基于生產(chǎn)環(huán)境的數(shù)據(jù)庫,創(chuàng)建V1版本的腳本;基于開發(fā)庫相對于生產(chǎn)庫的變更,創(chuàng)建V2版本的腳本。在開發(fā)環(huán)境baseline,然后修改版本記錄,改為2。在生產(chǎn)環(huán)境中baseline,然后migrate使其升級到2。

          方案一:
             需要更多的人工介入,但是比較穩(wěn)妥;
          方案二:
             難點在于溯源出正確的差異,編制V2腳本。



          本次的學(xué)習(xí)到這里就結(jié)束了,因為圖圖也是第一次接觸這種數(shù)據(jù)遷移軟件,所以總結(jié)不是很到位,如果有問題可以加圖圖微信,大家一起學(xué)習(xí)、一起來解決。

          如果對您有幫助 請點個關(guān)注,萬分感謝
                    

                                          (QQ招聘群  710566091
                                           微信招聘群 請加圖圖微信)

          
                          
          瀏覽 88
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕第五页在线观看 | 撸一撸免费在线 | 翔田千一区二区三区 | 天天AV天天爽 | 免费国产网站污污 |