Spring Boot項(xiàng)目使用Flyway的詳細(xì)教程
Purpose
開發(fā)人員在合作的時(shí)候經(jīng)常遇到以下場景:
1.開發(fā)人員A在自己的本地?cái)?shù)據(jù)庫做了一些表結(jié)構(gòu)的改動(dòng),并根據(jù)這些改動(dòng)調(diào)整了DAO層的代碼,然后將代碼上傳到svn或git等版本控制服務(wù)器上。此時(shí)如果開發(fā)人員B拉取了A的代碼改動(dòng),在運(yùn)行項(xiàng)目的時(shí)候很可能會(huì)報(bào)錯(cuò),因?yàn)锽的本地SQL數(shù)據(jù)庫并沒有修改。
2.在項(xiàng)目上線的時(shí)候,當(dāng)服務(wù)器拉取的版本控制服務(wù)器的最新修改后,必須同時(shí)運(yùn)行SQL數(shù)據(jù)庫的修改腳本,如果忘了跑數(shù)據(jù)庫腳本,那么會(huì)出現(xiàn)嚴(yán)重的問題。
傳統(tǒng)的解決方案就是在一個(gè)固定的文件夾中,將需要跑的SQL腳本放在里面。開發(fā)人員在合作的時(shí)候,A修改了數(shù)據(jù)庫,在B遇到問題的時(shí)候,可能需要交流溝通一下,去跑需要的腳本。在項(xiàng)目上線的過程中,也是運(yùn)維人員在規(guī)定的文件夾中,找到需要跑的SQL腳本。運(yùn)行它們。
Flyway等migration工具就是要把開發(fā)人員和運(yùn)維人員從以上這些場景的繁瑣工作中解放出來,如果使用maven的話,那么在項(xiàng)目編譯(SpringBoot運(yùn)行Application)的時(shí)候,SQL數(shù)據(jù)庫的改動(dòng)就自動(dòng)進(jìn)入數(shù)據(jù)庫,只要啟動(dòng)成功,開發(fā)或者運(yùn)維人員對SQL數(shù)據(jù)庫的migrate過程是無感知的,項(xiàng)目依然可以照常運(yùn)行。
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中運(yùn)行:
create database flyway_test; use flyway_test;
4.修改配置文件,將username和password改成本地MySQL數(shù)據(jù)庫的。
5.運(yùn)行FlywayTestApplication類。
6.在mysql console中運(yùn)行
show tables;
即可看到以下結(jié)果:
(schema_version表保存了數(shù)據(jù)庫版本信息,哪些腳本已經(jīng)被執(zhí)行,先不用管)
7.一張demo表被自動(dòng)創(chuàng)建出來了。
What Happened
以上過程是如何實(shí)現(xiàn)的呢?
Flyway在maven項(xiàng)目編譯(SpringBoot運(yùn)行Application)的時(shí)候,自動(dòng)掃描resources/db/migration目錄下的文件,
打開V1_demo.sql:
就是剛剛自動(dòng)運(yùn)行的SQL腳本。添加腳本的話,依次使用V2__XXX.sql,V3__XXX.sql,以此類推,腳本中使用正常的SQL語句即可,沒有任何學(xué)習(xí)負(fù)擔(dān)。
這樣,在開發(fā)人員合作以及項(xiàng)目部署的時(shí)候,F(xiàn)lyway就起到了加強(qiáng)自動(dòng)化部署、實(shí)踐持續(xù)交付等作用。
Instruction - Use in Current Project
那么如何在已經(jīng)開發(fā)了一段時(shí)間的項(xiàng)目中使用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(運(yùn)行Application)即可看到SQL腳本運(yùn)行結(jié)果。(注意V1后面是兩個(gè)下劃線)
Appendix
1.出現(xiàn)錯(cuò)誤的解決方法:
如果你的SQL腳本運(yùn)行失敗,到schema_version表中刪除最新一條數(shù)據(jù),
比如我故意寫一個(gè)錯(cuò)誤的SQL語句到V2__demo2.sql,運(yùn)行mvn compile(運(yùn)行Application)。
可以看到最新一條的success列為false。
如果部分成功了,要手動(dòng)rollback,修改SQL腳本正確后再次mvn compile(運(yùn)行Application)。
2.更多信息請?jiān)L問官網(wǎng):https://flywaydb.org/
到此這篇關(guān)于Spring Boot項(xiàng)目使用Flyway的文章就介紹到這了,更多相關(guān)Spring Boot使用Flyway內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?Mybatis使用resultMap時(shí),屬性賦值順序錯(cuò)誤的巨坑
這篇文章主要介紹了Java?Mybatis使用resultMap時(shí),屬性賦值順序錯(cuò)誤的巨坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Springboot實(shí)現(xiàn)前后端分離excel下載
這篇文章主要介紹了Springboot實(shí)現(xiàn)前后端分離excel下載,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Spring?IOC中對象的創(chuàng)建、策略及銷毀時(shí)機(jī)和生命周期詳解
這篇文章主要介紹了Spring?IOC中對象的創(chuàng)建、策略及銷毀時(shí)機(jī)和生命周期詳解,Spring默認(rèn)使用類的空參構(gòu)造方法創(chuàng)建bean,假如類沒有空參構(gòu)造方法,將無法完成bean的創(chuàng)建,需要的朋友可以參考下2023-08-08在springboot中對kafka進(jìn)行讀寫的示例代碼
本篇文章主要介紹了在springboot中對kafka進(jìn)行讀寫的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09idea數(shù)據(jù)庫驅(qū)動(dòng)下載失敗的問題及解決
這篇文章主要介紹了idea數(shù)據(jù)庫驅(qū)動(dòng)下載失敗的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01SpringCloud微服務(wù)之Config知識(shí)總結(jié)
今天帶大家學(xué)習(xí)SpringCloud微服務(wù)中的Config的相關(guān)知識(shí),文中有非常詳細(xì)的介紹,對正在學(xué)習(xí)SpringCloud微服務(wù)的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05