flyway官方文档地址:https://documentation.red-gate.com/fd
对于不怎么看文档的我来说:
1)flyway是个管理数据库版本的工具,可以对不同环境的sql进行迁移操作。
2)优点:初始化、后期数据的管理、变更等,个人认为锦上添花的是一件执行数据脚本,方便快捷
对于数据库每当发布时会出现手动执行sql脚本进行升级数据库,中间经常出现一些漏写、错写情况,对数据库的版本与代码的版本不匹配,
前缀:
V 代表版本变迁(Versioned Migrations),
U 代表撤销变迁(Undo Migrations),
R 代表可重复变迁(Repeatable Migrations),一般为可重复执行的sql语句。
版本号: 唯一的版本号,比如V1.0.1
分隔符: __ (两个下划线)
描述信息: 描述信息
后缀: .sql
== 其中,V开头的SQL执行优先级要比R开头的SQL优先级高==
命名eg:
V1__insert.sql
- 0.0.1.1 比 0.0.1 高
- 0.0.10 和 0.0.010 一样高
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--引入 Spring Boot Starter 父工程: -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.flyway</groupId>
<artifactId>flyway</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--跳过测试类打包-->
<skipTests>true</skipTests>
<!-- spring-boot & spring cloud & alibaba -->
<spring-boot.version>3.2.0</spring-boot.version>
<spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
<spring-cloud.version>2023.0.0</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<!--导入MP包之后,删除原有的Mybatis的包 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.4.1</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>9.22.2</version>
</dependency>
<!--必须同时引入flyway-mysql,否则会报不支持mysql8.1版本数据库。 -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-mysql</artifactId>
<version>9.22.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>8.0.4</version>
<configuration>
<url> 数据库地址</url>
<user>数据库用户名</user>
<password>密码</password>
<driver>com.mysql.cj.jdbc.Driver</driver>
</configuration>
</plugin>
</plugins>
</build>
</project>
spring:
# 数据库配置
datasource:
url:
username:
password:
driver-class-name: com.mysql.cj.jdbc.Driver
flyway:
# 开启数据库脚本备份
enabled: true
# 默认1,从0开始可以规避版本1不执行问题
baseline-version: 0
# flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉。这个默认值是 false 理论上作为默认配置是不科学的。
clean-disabled: false
# SQL 脚本的目录,多个路径使用逗号分隔 默认值 classpath:db/migration
locations: classpath:db/migration
#是否允许无序的迁移,默认false
out-of-order: false
#编码
encoding: UTF-8
# 执行迁移时是否自动调用验证 当你的 版本不符合逻辑 比如 你先执行了 DML 而没有 对应的DDL 会抛出异常
validate-on-migrate: true
# 设置为true,当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
baselineOnMigrate: true
package com.Flyway
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootFlywayApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootFlywayApplication.class, args);
}
}