Flyway

1、什么是Flyway

Flyway是一款开源的数据库版本管理工具,Flyway可以独立于应用实现管理并跟踪数据库的变更。
Flyway根据自己的约定,不需要复杂的配置就可以实现数据的Migrate。

2、Flyway工作机制

Flyway的运行机制很简单,其中Migrate是Flyway工作流的核心功能,主要目的就是把数据库Schema迁移到最新版本。
Flyway每次在执行Migrate的时候会检测你的数据库中的flyway_schema_history表。
如果它没有检测到,会自动创建一张新的flyway_schema_history表用于版本控制。
当检测到你有新的版本需要迁移的时候,Flyway会逐一比对flyway_schema_history表中的已存在的版本记录,
如果有未应用的Migrations,Flyway会获取这些Migrations并按次序Apply到数据库中,否则不需要做任何事情。
另外,通常在应用程序启动时应默认执行Migrate操作,从而避免程序和数据库的不一致性。

3、Flyway规约

V20210402_01__create_tb_user.sql

首先我们需要一个大写的V作为版本的前缀标志,然后在后面紧跟着一个数字作为版本号,这个就是我之前提到的Flyway进行追踪的依据。
在版本号后面需要下划线作为分隔符用来分割版本号和说明(这里特别需要注意的是分隔符是两个下划线)。

4、集成SpringBoot

Spring Boot 将会自动管理Flyway的启动和运行。
然后Flyway会默认在你的项目src/main/resources/db/migration目录下查找SQL脚本。
将你的SQL脚本写完然后放入此路径下后就可以运行你的项目,Spring会自动创建Flyway的Bean来处理你的脚本。

POM


    org.flywaydb
    flyway-core
    6.1.0

YAML

spring:
  # 数据库连接配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm-demo?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
    username: xxx
    password: xxx
  flyway:
    # 是否启用flyway
    enabled: true
    # 编码格式,默认UTF-8
    encoding: UTF-8
    # 迁移sql脚本文件存放路径,默认db/migration
    locations: classpath:db/migration
    # 迁移sql脚本文件名称的前缀,默认V
    sql-migration-prefix: V
    # 迁移sql脚本文件名称的分隔符,默认2个下划线__
    sql-migration-separator: __
    # 迁移sql脚本文件名称的后缀
    sql-migration-suffixes: .sql
    # 迁移时是否进行校验,默认true
    validate-on-migrate: true
    # 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
    baseline-on-migrate: true

5、示例

目录结构

src
  └─main
    ├─java
    │   └─db
    │     ├─bean 
    │     ├─core 
    │     └─testdata 
    └─resources
        └─db
           ├─dev 
           ├─envdata 
           ├─migration 
           │   ├─V20210402_01__create_tb_user.sql
           │   ├─V20210402_02__alter_user.sql
           │   └─V20210402_03__inser_tb_user.sql
           └─testdata 

V20210402_01__create_tb_user.sql

create table tb_user (
  user_id serial not null,
  user_name varchar(36) not null
) ;

comment on table tb_user is '用户表';
comment on column tb_user.user_id is '用户ID';
comment on column tb_user.user_name is '用户名字';

V20210402_02__alter_user.sql

alter table tb_users add column sex varchar (4);
comment on column tb_user.sex is '性别';

V20210402_03__inser_tb_user.sql

truncate table tb_users;

COPY tb_users(
user_id
,user_name
,sex) 
FROM STDIN WITH (FORMAT csv);

1,Yuguo,M
2,Zihan,F

你可能感兴趣的:(Flyway)