集成 Flyway

Flayway 是一款数据库版本控制管理工具,,支持数据库版本自动升级。

参考文档

1 引入插件和依赖

build.gradle

plugins {
id "org.springframework.boot" version "${springBootVersion}"
id "io.spring.dependency-management" version "${springDependencyManagementVersion}"
id "war"
id "org.flywaydb.flyway" version "6.4.4" // Flyway 插件
}
dependencies {
// flyway
implementation "org.flywaydb:flyway-core:6.4.4"
}

2 创建数据库

手工创建数据库

create database wk_example

也可以使用自动的方式创建数据库

有两种方法:

  • 在 springboot 中撰写一个函数来创建。
  • 在 flyway 连接的是 sys 数据库,然后在 sql 文件中创建数据库(不推荐)

3 编写配置文件

下面三个步骤:

  • 添加application-flyway.yml文件
  • 修改application-flyway.yml中的数据库配置
  • 修改application.yml 追加 flyway 配置文件

application.yml

active: sdb,flyway

application-flyway.yml

spring:
flyway:
url: jdbc:mysql://127.0.0.1:3306/wk_example?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
user: root
password: 123456
driver: com.mysql.cj.jdbc.Driver
locations: classpath:db/migration # 指定sql文件存放的目录

4 编写 sql 文件

文件需要放在 db/migration 目录下

V1__Create_student_table.sql

  • V 为固定前缀分隔符,代表数据库版本化;
  • 21 为 SQL 脚本版本,’’ 翻译为小数点,2_1 即为 2.1 版本;
  • __为两个下划线,代表中间分隔符;
  • init_request 为 SQL 脚本名,概述本脚本要进行的操作;
  • .sql 为固定后缀。

5 启动项目

启动 springboot 后,会自动建立数据库表

为了让先初始化脚本,然后再执行查询数据库程序,这里使用了下面的参数。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@DependsOn({"flyway", "flywayInitializer"})
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//... 这个启动的函数,会自动查询数据库中的内容,所以要等flyway启动后,执行下面的代码
}

6 其他

Flyway 的其他参数配置

spring:
flyway:
baseline-version: 1 # 开始执行基准迁移时对现有的schema的版本打标签,默认值为1.
baseline-description: first migration # 对执行迁移时基准版本的描述
baseline-on-migrate: true # 当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.
check-location: true # 检查迁移脚本的位置是否存在,默认false.
clean-on-validation-error: false # 当发现校验错误时是否自动调用clean,默认false.
encoding: UTF-8 # 设置迁移时的编码,默认UTF-8.
ignore-future-migrations: true # 在读取模式历史记录表时是否忽略将来的迁移。
init-sqls: # 当初始化好连接时要执行的SQL.
out-of-order: false # 是否允许无序的迁移,默认false.
placeholder-prefix: # 设置每个placeholder的前缀,默认${.
placeholder-suffix: # 设置每个placeholder的后缀,默认}.
schemas: # 设定需要flyway迁移的schema,大小写敏感,默认为连接默认的schema.
sql-migration-prefix: # 迁移文件的前缀,默认为V.
sql-migration-separator: # 迁移脚本的文件名分隔符,默认__
sql-migration-suffixes: # 迁移脚本的后缀,默认为.sql
table: # 使用的元数据表名,默认为schema_version
validate-on-migrate: true # 迁移时是否校验,默认为true.