整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          數據庫版本管理工具Flyway——入門向

          最近想給項目添加數據庫版本管理工具Flyway,花了幾天時間研究了一下,本文將從一個初學者的角度使用Flyway。

          一、Flyway介紹

          Flyway是一個開源的數據庫版本管理工具,它通過創建歷史記錄表來跟蹤數據庫狀態,實現自動化遷移。Flyway以其簡單、專注和強大的特點,幫助開發團隊輕松管理數據庫的變更和版本控制。

          剛開始看到這些描述的時候總感覺懵懵的,理解不了Flyway的用處,其實通俗的說,Flyway就是為了保證開發環境和生產環境的表結構一致,防止因為開發環境中修改表結構而忘了在生產環境中修改表結構而造成的錯誤;同時Flyway也可以對數據庫版本進行管理,在需要時可以根據執行記錄回滾(不過親測社區版沒有這個功能,需要使用pro版)。

          二、Flyway的工作流程

          1.項目啟動時,程序會自動執行指定路徑(默認是 :db/ )下的sql文件。

          2.第一次執行時,會創建一個名為 y 的表,用于記錄數據庫的版本信息,當數據庫非空時,會自動生成基線(需在配置文件中開啟)。

          3. Flyway會根據文件名按版本號從小到大依次執行。

          三、Flyway環境搭建

          1.在pom文件中引入依賴(注意是當前模塊的pom文件)

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

          2.yaml文件中添加相關配置

          flyway:
              # 是否啟用flyway
              enabled: true
              # 編碼格式,默認UTF-8
              encoding: UTF-8
              # 遷移sql腳本文件存放路徑,默認db/migration
          

          sql命名表_數據庫的命名規則_sql數據庫命名規則

          locations: classpath:db/migration # 遷移sql腳本文件名稱的前綴,默認V sql-migration-prefix: V # 遷移sql腳本文件名稱的分隔符,默認2個下劃線__ sql-migration-separator: __ # 遷移sql腳本文件名稱的后綴 sql-migration-suffixes: .sql # 遷移時是否進行校驗,默認true validate-on-migrate: true # 當遷移發現數據庫非空且存在沒有元數據的表時,自動執行基準遷移,新建schema_version表 baseline-on-migrate: true

          3.若需要使用Flyway插件,還需加入插件的依賴,非必須。

          <build>
                  <plugins>
                      <plugin>
                          <groupId>org.flywaydbgroupId>
                          <artifactId>flyway-maven-pluginartifactId>
                          <version>5.2.4version>
                          <configuration>
                              <url>jdbc:mysql://localhost:3306/flyway-demo?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghaiurl>
                              <user>rootuser>
                              <password>rootpassword>
          

          sql數據庫命名規則_sql命名表_數據庫的命名規則

          <driver>com.mysql.cj.jdbc.Driverdriver> configuration> plugin> plugins> build>

          四、Flyway使用方法

          (1)新建sql文件

          需要更改表結構或數據時,不要直接在數據庫管理工具(如Navicat)中更改,而是采用寫sql語句的方式。

          在路徑/db/下新建sql文件(需嚴格按照文件命名規則),根據需求寫sql語句,然后啟動項目即可,flyway會自動執行sql文件并將該版本記錄在表y中。

          (2)sql文件命名規則

          sql文件命名需要嚴格按照命名規則,且版本號遞增的方式命名。

          1.僅需要被執行一次的sql命名以大寫的"V"開頭,V+版本號(版本號的數字間以"."分隔開)+雙下劃線(用來分隔版本號和描述)+文件描述+后綴名。為避免命名沖突且保證版本號遞增,版本號盡量采用 年月日時分秒 進行命名。例:假如當前時間是2024年8月27日15時59分18秒,需求是新建表,則文件命名為:

          V2024.8.27.15.59..sql。

          若執行失敗,可嘗試修改文件名中的版本號,修改為執行時時間。

          文件一旦被執行不允許再次修改,若有新需求需重新創建sql文件。

          2.可重復運行的SQL,則以大寫的“R”開頭,后面再以兩個下劃線分割,其后跟文件名稱,最后以.sql結尾。比如: .sql 。文件每次被修改都會重新執行。

          五、可能遇到的問題

          1.如果報錯,可以檢查數據庫名稱、用戶名、密碼等是否正確;

          2.報錯還可能的原因是依賴沖突問題,我報的錯是不支持MySQL5.7版本,實際上是不知道在哪里已經有了一個Flyway8.x的依賴,跟我引入的6.1.0版本產生了沖突,只需在父pom文件中加入依賴強制使用6.1.0版本即可解決。

          3.有可能執行沒有報錯,但是就是執行沒有效果,我也不知道是什么原因,試了幾個只有6.1.0可以生效,所以可以嘗試切換Flyway的版本解決。

          4.還有一種情形:多人協作時,假設A和B都新建了sql文件,A的版本低于B,A執行項目后,數據庫記錄了該版本,但是A還沒來得及提交代碼到git上,B執行項目時會因為缺少A的sql文件而報錯,若想要避免報錯,可以在配置文件中將

          flyway.ignore-missing-設置為true。


          主站蜘蛛池模板: 四虎一区二区成人免费影院网址| 久久国产高清一区二区三区| 极品少妇一区二区三区四区| 97久久精品午夜一区二区| 国产成人久久一区二区三区 | 国产一区二区三区在线| 色一乱一伦一区一直爽| 人成精品视频三区二区一区 | 国语精品一区二区三区| 一区二区三区无码高清| 一区二区三区国模大胆| 久久精品综合一区二区三区| 97久久精品午夜一区二区| 亚洲av不卡一区二区三区| 国产精品一区二区久久精品涩爱| 国产日本亚洲一区二区三区| 亚洲日韩中文字幕无码一区| 精品无码国产一区二区三区AV| 亚洲日韩激情无码一区 | 人妻无码一区二区视频| 韩国女主播一区二区| 欧美日韩精品一区二区在线视频| 欧亚精品一区三区免费| 成人精品视频一区二区| 日韩在线一区视频| 国产一区二区三区在线观看影院| 亚洲日本va一区二区三区| 色老头在线一区二区三区| 精品一区中文字幕| 韩国理伦片一区二区三区在线播放 | 久久久精品一区二区三区| 免费观看日本污污ww网站一区| 国产剧情国产精品一区| 日本一区二区三区在线视频| 亚洲综合一区无码精品| 91一区二区三区四区五区| 中文字幕人妻无码一区二区三区| 日韩精品中文字幕视频一区 | 一区一区三区产品乱码| 国产成人一区二区三区电影网站 | 亚洲av无码一区二区三区乱子伦 |