在项目迭代开发中,难免会有更新数据库 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
第一次配置好使用需要把原来数据库的表结构删除。