Spring Boot項目使用Flyway


Purpose

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

1.開發人員A在自己的本地數據庫做了一些表結構的改動,並根據這些改動調整了DAO層的代碼,然后將代碼上傳到svngit等版本控制服務器上。此時如果開發人員B拉取了A的代碼改動,在運行項目的時候很可能會報錯,因為B的本地SQL數據庫並沒有修改。

2.在項目上線的時候,當服務器拉取的版本控制服務器的最新修改后,必須同時運行SQL數據庫的修改腳本,如果忘了跑數據庫腳本,那么會出現嚴重的問題。

傳統的解決方案就是在一個固定的文件夾中,將需要跑的SQL腳本放在里面。開發人員在合作的時候,A修改了數據庫,在B遇到問題的時候,可能需要交流溝通一下,去跑需要的腳本。在項目上線的過程中,也是運維人員在規定的文件夾中,找到需要跑的SQL腳本。運行它們。

Flywaymigration工具就是要把開發人員和運維人員從以上這些場景的繁瑣工作中解放出來,如果使用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.使用IntellijEclipse import existing maven project

3.在本地mysql console中運行:

create database flyway_test;
use flyway_test;

4.修改配置文件,將usernamepassword改成本地MySQL數據庫的。

 

5.運行FlywayTestApplication類。

6.mysql console中運行

show tables;

即可看到以下結果:

 

(schema_version表保存了數據庫版本信息,哪些腳本已經被執行,先不用管)

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

What Happened

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

Flywaymaven項目編譯(SpringBoot運行Application)的時候,自動掃描resources/db/migration目錄下的文件,

 

打開V1_demo.sql

 

就是剛剛自動運行的SQL腳本。添加腳本的話,依次使用V2__XXX.sqlV3__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.sqlmvn compile(運行Application)即可看到SQL腳本運行結果。(注意V1后面是兩個下划線)

  

Appendix

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

如果你的SQL腳本運行失敗,到schema_version表中刪除最新一條數據,

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

 

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

如果部分成功了,要手動rollback,修改SQL腳本正確后再次mvn compile(運行Application)。

 

2.更多信息請訪問官網:https://flywaydb.org/ 

 

dreamingodd原創文章,如轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM