SpringBoot中使用Flyway進(jìn)行數(shù)據(jù)庫遷移的詳細(xì)流程
概要
在 Spring Boot 項目開發(fā)中,數(shù)據(jù)庫的變更不可避免。手動執(zhí)行 SQL 腳本不僅容易出錯,也難以維護(hù)數(shù)據(jù)庫版本的一致性。Flyway
作為一款輕量級的數(shù)據(jù)庫遷移工具
,能夠幫助我們優(yōu)雅地解決這些問題。
Spring Boot 集成 Flyway
1、添加 Flyway 依賴
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>6.1.0</version> </dependency>
2、配置 Flyway
spring: flyway: enabled: true locations: classpath:db/migration baseline-on-migrate: true placeholder-replacement: false datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/my_info?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false username: root password: iuowiebd
3、創(chuàng)建數(shù)據(jù)庫遷移腳本
Flyway 使用 SQL 腳本來定義數(shù)據(jù)庫的變更。腳本需要放在 src/main/resources/db/migration 目錄下(默認(rèn)路徑),并且遵循特定的命名規(guī)則:V<版本號>__<描述>.sql
例如:V1__create_user_table.sql
CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL ); insert into user (name, email) values ('user1', 'user1@qq.com');
4、啟動應(yīng)用
啟動 Spring Boot 應(yīng)用,F(xiàn)lyway 會自動執(zhí)行 db/migration 目錄下的遷移腳本,并將執(zhí)行記錄存儲在 flyway_schema_history 表中。
控制臺關(guān)于 flyway 的日志信息:
成功創(chuàng)建表:
Flyway 其他用法
1、 禁用 Flyway 自動遷移
在某些場景下,可能需要手動控制 Flyway 的遷移,可以禁用自動遷移:
spring: flyway: enabled: false
bug錯誤
Flyway版本不兼容
如果使用的 Flyway 版本與 Spring Boot 版本不兼容,可能會導(dǎo)致 Flyway 無法正常工作。
控制臺不打印任何關(guān)于 flyway 的日志。
數(shù)據(jù)庫存在表了
數(shù)據(jù)庫存在表了,就不會執(zhí)行 sql 了。
Flyway 只會執(zhí)行比當(dāng)前數(shù)據(jù)庫版本號更高的遷移腳本。如果數(shù)據(jù)庫的當(dāng)前版本是 1,而你的遷移腳本的版本號也是 1 或者更低,F(xiàn)lyway 會認(rèn)為這些腳本已經(jīng)執(zhí)行過,因此不會再次執(zhí)行。
所以只需把 sql 腳本的版本改一下,V2__create_user_table.sql
(升高版本)
Flyway 的校驗(yàn)和(Checksum)不匹配
我先啟動項目,數(shù)據(jù)庫遷移成功,然后我改動了sql文件,就報錯:
如果本地遷移腳本的內(nèi)容發(fā)生了更改(例如,修改了 SQL 腳本),F(xiàn)lyway 會檢測到校驗(yàn)和不匹配,從而拋出此錯誤。
以上就是SpringBoot中使用Flyway進(jìn)行數(shù)據(jù)庫遷移的詳細(xì)流程的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Flyway數(shù)據(jù)遷移的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JAVA 自定義線程池的最大線程數(shù)設(shè)置方法
這篇文章主要介紹了JAVA 自定義線程池的最大線程數(shù)設(shè)置方法,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06springboot3.X版本集成mybatis遇到的問題及解決
在將SpringBoot3.X版本與MyBatis集成時,直接參考基于SpringBoot2.X的配置方法會導(dǎo)致各種報錯,尤其是無法注入mapper的bean問題,這主要是因?yàn)镾pringBoot3.X版本需要搭配MyBatis3.0.3及以上版本才能正常工作,通過更新maven配置至MyBatis3.0.3版本,可以解決這一問題2024-09-09Kotlin基礎(chǔ)教程之控制流(順序,分支,循環(huán))
這篇文章主要介紹了Kotlin基礎(chǔ)教程之控制流的相關(guān)資料,需要的朋友可以參考下2017-05-05在SpringBoot項目中如何實(shí)現(xiàn)線程池的動態(tài)監(jiān)控
Spring Boot因其簡便、高效的特點(diǎn)廣受開發(fā)者喜愛,在復(fù)雜的業(yè)務(wù)場景下,如何確保Spring Boot應(yīng)用的高性能和穩(wěn)定性成為了一個關(guān)鍵問題,其中,線程池的管理策略直接影響到系統(tǒng)的吞吐量和資源利用效率,本文將重點(diǎn)探討在Spring Boot項目中,如何實(shí)現(xiàn)線程池的動態(tài)監(jiān)控2023-10-10Spring boot項目使用thymeleaf模板過程詳解
這篇文章主要介紹了Spring boot項目使用thymeleaf模板過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07Java封裝實(shí)現(xiàn)自適應(yīng)的單位轉(zhuǎn)換工具類
這篇文章主要為大家詳細(xì)介紹了如何使用Java封裝實(shí)現(xiàn)一個自適應(yīng)的單位轉(zhuǎn)換工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03