1. 程式人生 > 程式設計 >Spring Boot專案使用Flyway的詳細教程

Spring Boot專案使用Flyway的詳細教程

Purpose

開發人員在合作的時候經常遇到以下場景:

1.開發人員A在自己的本地資料庫做了一些表結構的改動,並根據這些改動調整了DAO層的程式碼,然後將程式碼上傳到svn或git等版本控制伺服器上。此時如果開發人員B拉取了A的程式碼改動,在執行專案的時候很可能會報錯,因為B的本地SQL資料庫並沒有修改。

2.在專案上線的時候,當伺服器拉取的版本控制伺服器的最新修改後,必須同時執行SQL資料庫的修改指令碼,如果忘了跑資料庫指令碼,那麼會出現嚴重的問題。

傳統的解決方案就是在一個固定的資料夾中,將需要跑的SQL指令碼放在裡面。開發人員在合作的時候,A修改了資料庫,在B遇到問題的時候,可能需要交流溝通一下,去跑需要的指令碼。在專案上線的過程中,也是運維人員在規定的資料夾中,找到需要跑的SQL指令碼。執行它們。

Flyway等migration工具就是要把開發人員和運維人員從以上這些場景的繁瑣工作中解放出來,如果使用maven的話,那麼在專案編譯(SpringBoot執行Application)的時候,SQL資料庫的改動就自動進入資料庫,只要啟動成功,開發或者運維人員對SQL資料庫的migrate過程是無感知的,專案依然可以照常執行。

Technical Background

To read and practice this document,user ought to be able to develop projects via git,SpringBoot and MySQL.

Instructions - Run Demo

1.下載demo原始碼:

git clone https://git.oschina.net/dreamingodd/spring-boot-flyway-demo.git

2.使用Intellij或Eclipse import existing maven project。

3.在本地mysql console中執行:

create database flyway_test;
use flyway_test;

4.修改配置檔案,將username和password改成本地MySQL資料庫的。

Spring Boot專案使用Flyway的詳細教程

5.執行FlywayTestApplication類。

6.在mysql console中執行

show tables;

即可看到以下結果:

Spring Boot專案使用Flyway的詳細教程

(schema_version表儲存了資料庫版本資訊,哪些指令碼已經被執行,先不用管)

7.一張demo表被自動創建出來了。

What Happened

以上過程是如何實現的呢?

Flyway在maven專案編譯(SpringBoot執行Application)的時候,自動掃描resources/db/migration目錄下的檔案,

Spring Boot專案使用Flyway的詳細教程

開啟V1_demo.sql:

Spring Boot專案使用Flyway的詳細教程

就是剛剛自動執行的SQL指令碼。新增指令碼的話,依次使用V2__XXX.sql,V3__XXX.sql,以此類推,指令碼中使用正常的SQL語句即可,沒有任何學習負擔。

這樣,在開發人員合作以及專案部署的時候,Flyway就起到了加強自動化部署、實踐持續交付等作用。

Instruction - Use in Current Project

那麼如何在已經開發了一段時間的專案中使用Flyway呢?

1.Maven配置

<dependencies>中加上

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

<build>中加上

<plugin>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-maven-plugin</artifactId>
  <version>4.0.3</version>
</plugin>

2.application.properties配置

flyway.baselineOnMigrate=true

如果是application.yml,則為

flyway.baselineOnMigrate: true

3.在resources/db/migration中新增V1__XXX.sql,mvn compile(執行Application)即可看到SQL指令碼執行結果。(注意V1後面是兩個下劃線)

Appendix

1.出現錯誤的解決方法:

如果你的SQL指令碼執行失敗,到schema_version表中刪除最新一條資料,

比如我故意寫一個錯誤的SQL語句到V2__demo2.sql,執行mvn compile(執行Application)。

Spring Boot專案使用Flyway的詳細教程

可以看到最新一條的success列為false。

如果部分成功了,要手動rollback,修改SQL指令碼正確後再次mvn compile(執行Application)。

2.更多資訊請訪問官網:https://flywaydb.org/

到此這篇關於Spring Boot專案使用Flyway的文章就介紹到這了,更多相關Spring Boot使用Flyway內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!