引用文章
Spring Boot 集成 Flyway 实现数据库版本控制 - 知乎 (zhihu.com)
【SpringBoot】弄懂flyway前的最后几步 - 简书 (jianshu.com)
(19条消息) SpringBoot集成flyway、mybatis-plus(超详细)VoiceKing2017的博客-CSDN博客springboot集成mybatisplus
Flyway简介
flyway是一款开源的数据库版本控制工具,在多人操作数据库的情境下,使用flyway可以自动将新增的数据库操作(增删表、增删字段、数据增删)进行统一的管理,使每个开发者数据库中表结构及初始数据保持一致;同时具有指定基线版本、可重复执行脚本等多种功能。支持的数据库包括Oracle、SQL Server(包括Amazon RDS和Azure SQL数据库)、Azure Synapse(原数据仓库)、DB2、MySQL(包括Amazon RDS、Azure数据库和谷歌云SQL)、Aurora MySQL、MariaDB、Percona XtraDB Cluster、TestContainers、PostgreSQL(包括Amazon RDS、Azure数据库、谷歌云SQL、TimescaleDB、YugabyteDB和Heroku)、Aurora PostgreSQL、Redshift、CockroachDB、SAP HANA、Sybase ASE、Informix、H2、HSQLDB、Derby、Snowflake、SQLite和Firebird。
flyway的简单工作过程,flyway运行后会在数据库中生成一张版本控制表,后续执行的sql脚本都会记录在这张表中,每条记录会有一个版本号,每次执行会校验这张表中的数据,如果这张表中的版本跟程序中最新的版本对应一致的话,不会执行任何脚本,如果之前的migration文件夹里面的sql文件有删除,需要同步删除版本控制表中的记录,否则会校验不通过,报错
Maven坐标
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>8.0.4</version>
</dependency>
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-data-jpa</artifactId>-->
<!--</dependency>-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
spring-boot-starter-data-jpa,mybatis-spring-boot-starter
可以选择其中一个导入,因为Flyway用到其中的数据库注解。
如果不导入的话,启动项目flyway不会自动执行!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.4</version>
</dependency>
要注意自己指定的flyway-core版本在被引入到别的模块中版本号可能被覆盖掉,
因为SpringBoot中会集成flyway的版本,例如
SpringBoot 2.4.4 集成flyway版本 7.1.1 (Oracle12.1.0.2标准版可以执行,企业版不行)
SpringBoot 2.6.0 集成flyway版本 8.0.4 (Oracle12.1.0.2都可以执行)
这篇博客是在idea中查看spring-boot-starter-parent 指定的其他包的版本
(19条消息) 查看spring-boot-starter-parent 指定的其他包的版本littlehaes的博客-CSDN博客spring-boot-starter-parent版本
application.yml配置
spring:
datasource:
#Oracle
url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
driver-class-name: oracle.jdbc.OracleDriver
#Mysql
#driver-class-name: com.mysql.jdbc.Driver
#url: jdbc:mysql://ip:端口号/flyway_test
username: c##INIT
password: root
flyway:
baseline-on-migrate: true
#如果数据库中已经存在数据,从基线版本之前的脚本不再执行
enabled: true
利用Flyway插件生成版本管理文件
Flyway Migration Creation 可以自动根据时间生成按Flyway规范要求的sql文件
File -> Settings -> Plugins -> 搜索Flyway Migration Creation下载
在resources下新建文件夹db,然后在db文件夹下新建文件夹migration
在migration文件夹上面右键New -> Flyway Migration -> Versioned migration
选择文件名生成文件,填入新建表等信息。
SQL 脚本命名规范如下:
Prefix+Version+Separator+Description+Suffix
Prefix 前缀:V 代表版本迁移,U 代表撤销迁移,R 代表可重复迁移
Version 版本号:版本号通常 . 和整数组成
Separator 分隔符:固定由两个下划线 __ 组成
Description 描述:由下划线分隔的单词组成,用于描述本次迁移的目的
Suffix 后缀:如果是 SQL 文件那么固定由 .sql 组成,如果是基于 Java 类则默认不需要后缀