在項目迭代開發中,難免會有更新數據庫 Schema 的情況,比如添加新表、在表中增加字段或者刪除字段等,那麼當我對數據庫進行一系列操作後,如何快速地在其他同事的電腦上同步?如何在測試/生產服務器上快速同步?
Flyway 簡介
Flyway 是獨立於數據庫的應用、管理並跟蹤數據庫變更的數據庫版本管理工具。用通俗的話講,Flyway 可以像 Git 管理不同人的代碼那樣,管理不同人的 sql 腳本,從而做到數據庫同步。
Spring Boot 集成 Flyway
-
1、在你的SpringBoot 項目中加入如下依賴:
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>5.2.4</version> </dependency>
-
2、然後在
application.yml
中寫入 Flyway 的相關配置(Flyway locations 默認讀取當前項目下的resources/db/migration
目錄)#數據庫版本管理和遷移 flyway: baseline-on-migrate: true locations: classpath:db
完整的yml文件,將上面的配置放到spring下就行。不用在flyway下配置數據庫路徑、用戶名、密碼,你只要yml中配置了就行。
spring: profiles: active: dev servlet: multipart: # 單個文件的最大值 max-file-size: 500MB # 上傳文件總的最大值 max-request-size: 1000MB #時間戳統一轉換 #jackson: # date-format: yyyy-MM-dd # time-zone: GMT+8 #數據庫版本管理和遷移 flyway: baseline-on-migrate: true locations: classpath:db server: #端口號 port: 8888 # 日誌 logging: config: classpath:logback-spring.xml #mybatis plush全局配置 mybatis-plus: global-config: db-config: # 全局邏輯刪除的實體字段名 logic-delete-field: is_valid # 邏輯已刪除值(默認爲 1) logic-delete-value: 0 # 邏輯未刪除值(默認爲 0) logic-not-delete-value: 1 #掃描路徑 typeAliasesPackage: com.sinosoft #xml映射路徑 mapperLocations: classpath*:mapper/*/*Mapper.xml,classpath*:mapper/*Mapper.xml
-
3、接下來,在
resources/db
目錄下創建需要執行的 SQL 腳本即可。注意 resoureces 目錄下存放SQL腳本的文件夾是否和配置的一樣。
命名規範:
- Prefix 前綴:V 代表版本遷移,U 代表撤銷遷移,R 代表可重複遷移
- Version 版本號:版本號通常
.
和整數組成 - Separator 分隔符:固定由兩個下劃線
__
組成 - Description 描述:由下劃線分隔的單詞組成,用於描述本次遷移的目的
- Suffix 後綴:如果是 SQL 文件那麼固定由
.sql
組成,如果是基於 Java 類則默認不需要後綴
//根據規範在resources/db目錄下創建SQL腳本文件
V1.0_20211104_1_表結構初始化.sql
V1.0_20211104_2_初始化碼錶.sql
OR
V20211104_1__表結構初始化.sql
V20211104_2__初始化碼錶.sql
第一次配置好使用需要把原來數據庫的表結構刪除。