溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringBoot如何整合Flyway

發(fā)布時(shí)間:2020-07-18 17:57:37 來(lái)源:億速云 閱讀:180 作者:小豬 欄目:編程語(yǔ)言

小編這次要給大家分享的是SpringBoot如何整合Flyway,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

Flyway是什么

Flyway是一款開(kāi)源的數(shù)據(jù)庫(kù)版本管理工具,F(xiàn)lyway可以獨(dú)立于應(yīng)用實(shí)現(xiàn)管理并跟蹤數(shù)據(jù)庫(kù)的變更,F(xiàn)lyway根據(jù)自己的約定,不需要復(fù)雜的配置就可以實(shí)現(xiàn)數(shù)據(jù)的Migrate。Migrations可以寫(xiě)成SQL腳本,也可以寫(xiě)在Java代碼中,F(xiàn)lyway還支持Spring Boot。

簡(jiǎn)介

在團(tuán)隊(duì)開(kāi)發(fā)當(dāng)中,有可能每個(gè)人都是使用自己本地的數(shù)據(jù)庫(kù)。當(dāng)數(shù)據(jù)庫(kù)的表或者字段更新時(shí),往往需要告知團(tuán)隊(duì)的其他同事進(jìn)行更新。
Flyway數(shù)據(jù)庫(kù)版本遷移工具,目的就是解決該問(wèn)題而誕生的(我自己想的)。每當(dāng)我們更新數(shù)據(jù)庫(kù)的時(shí)候,只需要添加SQL文件到指定目錄中。Flyway會(huì)在數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)表,專(zhuān)門(mén)記錄已更新的SQL文件。當(dāng)我們下次執(zhí)行時(shí)則不會(huì)執(zhí)行已記錄并且執(zhí)行成功的SQL文件。

整合

maven

現(xiàn)在的Flyway的最新版本已經(jīng)到了6.4.2。我用的是6.3.3

<!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core -->
<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-core</artifactId>
  <version>6.3.3</version>
</dependency>

application配置

搞定了Flyway的依賴后,修改一下SpringBoot的application.ymlapplication.xml配置。

spring:
 flyway:
  url: jdbc:mysql://192.168.138.132:3306/hotel-server&#63;useUnicode=true&characterEncoding=UTF-8 
  user: johnson 
  password: 123456 
  table: flyway_schema_history
  enabled: true
  locations: classpath:db/migration
  clean-disabled: false

flyway配置詳解

url:連接數(shù)據(jù)庫(kù)的Url 默認(rèn)為spring.datasource.url

user:連接數(shù)據(jù)庫(kù)的賬號(hào) 默認(rèn)為spring.datasource.username

password:連接數(shù)據(jù)庫(kù)的密碼 默認(rèn)為spring.datasource.password

table:自定義數(shù)據(jù)庫(kù)版本管理表 默認(rèn)為 flyway_schema_history

enabled:是否開(kāi)啟 默認(rèn)為開(kāi)啟

locations:SQL文件存放路徑 默認(rèn) classpath:db/migration

SQL文件

上面的locations參數(shù)配置的SQL文件存放路徑為 classpath:db/migration,classpath對(duì)應(yīng)的目錄就是resources目錄,創(chuàng)建后的目錄如下圖:

SpringBoot如何整合Flyway

SQL文件如上圖,SQL文件名必須為V1.0.x__xxx.sql(注意:這里的下劃線為兩個(gè)_,我也是掉坑了才知道),這樣可以對(duì)應(yīng)SQL更新的版本號(hào)。啟動(dòng)了SpringBoot項(xiàng)目后,就會(huì)自動(dòng)幫你執(zhí)行SQL文件,可以看到數(shù)據(jù)庫(kù)版本控制表中生成的數(shù)據(jù):

SpringBoot如何整合Flyway

clean操作

Flyway的clean操作:徹底清除已配置的架構(gòu),它將有效地為您提供一個(gè)全新的起點(diǎn)。所有對(duì)象(表,視圖,過(guò)程等)都將被刪除。

spring:
 flyway:
  clean-on-validation-error: true
  clean-disabled: false

clean-on-validation-error:發(fā)生驗(yàn)證的錯(cuò)誤時(shí)是否執(zhí)行clean操作(如SQL執(zhí)行失?。J(rèn)false,生產(chǎn)中必須使用false。
clean-disabled:是否禁用clean操作,默認(rèn)false,生產(chǎn)中必須使用true

如果我們?cè)O(shè)置 clean-on-validation-error = true,clean-disabled = false
當(dāng)我們的SQL文件執(zhí)行失敗,在數(shù)據(jù)庫(kù)版本控制表flyway_schema_history會(huì)添加一條失敗的記錄,success字段為0,此時(shí)并不會(huì)執(zhí)行clean操作。
當(dāng)把SQL文件修改正確并執(zhí)行完后,此時(shí)flyway_schema_history會(huì)把失敗記錄的success字段由0改為1。并且會(huì)執(zhí)行clean操作?。。。?!整個(gè)數(shù)據(jù)庫(kù)的表里面的數(shù)據(jù)都被清空了!(除非你在SQL文件中添加了insert操作)
其實(shí)在開(kāi)發(fā)環(huán)境我也是不建議使用clean,畢竟填數(shù)據(jù)也是要時(shí)間的。。。

總結(jié)

團(tuán)隊(duì)開(kāi)發(fā)當(dāng)中的必備工具?。〔贿^(guò)生產(chǎn)環(huán)境當(dāng)中記得把clean-disabled改為true

看完這篇關(guān)于SpringBoot如何整合Flyway的文章,如果覺(jué)得文章內(nèi)容寫(xiě)得不錯(cuò)的話,可以把它分享出去給更多人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI