1. 程式人生 > >SpringBoot整合Flyway(資料庫版本遷移工具)

SpringBoot整合Flyway(資料庫版本遷移工具)

# 簡介 在團隊開發當中,有可能每個人都是使用自己本地的資料庫。當資料庫的表或者欄位更新時,往往需要告知團隊的其他同事進行更新。 Flyway資料庫版本遷移工具,目的就是解決該問題而誕生的(我自己想的)。每當我們更新資料庫的時候,只需要新增SQL檔案到指定目錄中。Flyway會在資料庫建立一個表,專門記錄已更新的SQL檔案。當我們下次執行時則不會執行已記錄並且執行成功的SQL檔案。 # 整合 ## maven 現在的Flyway的最新版本已經到了`6.4.2`。我用的是`6.3.3`。 ```xml org.flywaydb flyway-core 6.3.3 ``` ## application配置 搞定了Flyway的依賴後,修改一下SpringBoot的`application.yml`或`application.xml`配置。 ```yml spring: flyway: url: jdbc:mysql://192.168.138.132:3306/hotel-server?useUnicode=true&characterEncoding=UTF-8 user: johnson password: 123456 table: flyway_schema_history enabled: true locations: classpath:db/migration clean-disabled: false ``` **flyway配置詳解** >
url:連線資料庫的Url 預設為spring.datasource.url > user:連線資料庫的賬號 預設為spring.datasource.username > password:連線資料庫的密碼 預設為spring.datasource.password > table:自定義資料庫版本管理表 預設為 flyway_schema_history > enabled:是否開啟 預設為開啟 > locations:SQL檔案存放路徑 預設 classpath:db/migration ## SQL檔案 上面的`locations`引數配置的SQL檔案存放路徑為` classpath:db/migration`,`classpath`對應的目錄就是``resources``目錄,建立後的目錄如下圖: ![flyway_path.jpg](http://qiniuyun.colablog.cn/c5cab818-4f89-40f8-8d60-806ab87137c1.jpg) SQL檔案如上圖,SQL檔名必須為`V1.0.x__xxx.sql`(**注意**:這裡的下劃線為兩個`_`,我也是掉坑了才知道),這樣可以對應SQL更新的版本號。**啟動了SpringBoot專案後**,就會自動幫你執行SQL檔案,可以看到資料庫版本控制表中生成的資料: ![table_data.jpg](http://qiniuyun.colablog.cn/8ce0e7e8-8d44-4ac7-8520-d8a53819637d.jpg) ## clean操作 Flyway的`clean`操作:**徹底清除已配置的架構,它將有效地為您提供一個全新的起點。所有物件(表,檢視,過程等)都將被刪除。** ```yml spring: flyway: clean-on-validation-error: true clean-disabled: false ``` `clean-on-validation-error`:發生驗證的錯誤時是否執行clean操作(如SQL執行失敗),預設false,生產中必須使用false。 `clean-disabled`:是否禁用clean操作,預設false,生產中必須使用true 如果我們設定 `clean-on-validation-error = true`,`clean-disabled = false`。 當我們的SQL檔案執行失敗,在資料庫版本控制表`flyway_schema_history`會新增一條失敗的記錄,success欄位為0,此時並不會執行`clean`操作。 當把SQL檔案修改正確並執行完後,此時`flyway_schema_history`會把失敗記錄的success欄位由0改為1。並且會執行`clean`操作!!!!!整個資料庫的表裡面的資料都被清空了!(除非你在SQL檔案中添加了`insert`操作) 其實在開發環境我也是不建議使用`clean`,畢竟填資料也是要時間的。。。 # 總結 團隊開發當中的必備工具啊!不過生產環境當中記得把`clean-disabled`改為`true` >
個人部落格網址: https://colablog.cn/ > 如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您 ![微信公眾號](http://qiniuyun.colablog.cn/%E4%BA%8C%E7%BB%B4%E7%A0