SpringBoot整合Flyway(資料庫版本遷移工具)
阿新 • • 發佈:2020-06-04
# 簡介
在團隊開發當中,有可能每個人都是使用自己本地的資料庫。當資料庫的表或者欄位更新時,往往需要告知團隊的其他同事進行更新。
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