flyway常用配置_Flyway快速入门及实战 | 青年博客

Flyway介绍

1、Flyway是什么?

Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。 Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置。 Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command Line和Java API,还支持Build构建工具和Spring Boot等。 同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。

关于Flywayhttps://flywaydb.org/

2、Flyway是如何工作的?

Flyway对数据库进行版本管理主要由Metadata表和6种命令完成。

2.1 Metadata

主要用于记录元数据。Flyway中最核心的就是用于记录所有版本演化和状态的Metadata表,在Flyway首次启动时会创建默认名为SCHEMA_VERSION的元数据表。 Metadata Table。

2.2 基本命令

每种命令功能和解决的问题范围不一样。

Migrate:

Migrate是指把数据库Schema迁移到最新版本,是Flyway工作流的核心功能,Flyway在Migrate时会检查Metadata(元数据)表,如果不存在会创建Metadata表,Metadata表主要用于记录版本变更历史以及Checksum之类的。 Migrate时会扫描指定文件系统或Classpath下的Migrations(可以理解为数据库的版本脚本),并且会逐一比对Metadata表中的已存在的版本记录,如果有未应用的Migrations,Flyway会获取这些Migrations并按次序Apply到数据库中,否则不需要做任何事情。另外,通常在应用程序启动时应默认执行Migrate操作,从而避免程序和数据库的不一致性。

Clean:

Clean操作在开发和测试阶段是非常有用的,它能够帮助快速有效地更新和重新生成数据库表结构,但特别注意的是:不应在Production的数据库上使用!

Info:

Info用于打印所有Migrations的详细和状态信息,其实也是通过Metadata表和Migrations完成的,下图很好地示意了Info打印出来的信息。 Info能够帮助快速定位当前的数据库版本,以及查看执行成功和失败的Migrations。

Validate:

Validate是指验证已经Apply的Migrations是否有变更,Flyway是默认是开启验证的。 Validate原理是对比Metadata表与本地Migrations的Checksum值,如果值相同则验证通过,否则验证失败,从而可以防止对已经Apply到数据库的本地Migrations的无意修改。

Baseline:

Baseline针对已经存在Schema结构的数据库的一种解决方案,即实现在非空数据库中新建Metadata表,并把Migrations应用到该数据库。 Baseline可以应用到特定的版本,这样在已有表结构的数据库中也可以实现添加Metadata表,从而利用Flyway进行新Migrations的管理了。

Repair:

Repair操作能够修复Metadata表,该操作在Metadata表出现错误时是非常有用的。 Repair会修复Metadata表的错误,通常有两种用途:

移除失败的Migration记录,该问题只是针对不支持DDL事务的数据库。

重新调整已经应用的Migratons的Checksums值,比如:某个Migratinon已经被应用,但本地进行了修改,又期望重新应用并调整Checksum值,不过尽量不要这样操作,否则可能造成其它环境失败。

如何使用Flyway

1、正确创建Migrations

Migrations是指Flyway在更新数据库时是使用的版本脚本。 Flyway对Migrations的扫描还必须遵从一定的命名模式,Migration主要分为两类:Versioned和Repeatable。

Versioned 一般常用的是Versioned类型,用于版本升级,每一个版本都有一个唯一的标识并且只能被应用一次,并且不能再修改已经加载过的Migrations,因为Metadata表会记录其Checksum值。

其中的version标识版本号,由一个或多个数字构成,数字之间的分隔符可以采用点或下划线,在运行时下划线其实也是被替换成点了,每一部分的前导零会被自动忽略。

Repeatable 是指可重复加载的Migrations,其每一次的更新会影响Checksum值,然后都会被重新加载,并不用于版本升级。对于管理不稳定的数据库对象的更新时非常有用。

Repeatable的Migrations总是在Versioned之后按顺序执行,但开发者必须自己维护脚本并且确保可以重复执行,通常会在sql语句中使用CREATE OR REPLACE来保证可重复执行。

2、脚本文件命名规则

文件名由以下部分组成,除了使用默认配置外,某些部分还可自定义规则。

prefix: 可配置,前缀标识,默认值V表示Versioned,R表示Repeatable。

version: 标识版本号,由一个或多个数字构成,数字之间的分隔符可用点.或下划线_。

separator: 可配置,用于分隔版本标识与描述信息,默认为两个下划线__。

description: 描述信息,文字之间可以用下划线或空格分隔。

suffix: 可配置,后续标识,默认为.sql。

3、Flyway与Spring+MVC集成

3.1 创建Migration目录

在工程的 src/main/resources目录下创建db/migration目录(Flyway加载Migrations时的默认Locations)

3.2 Maven配置

dependencies

dependencies

XHTML

org.flywaydb

flyway-core

5.0.7

1

2

3

4

5

org.flywaydb

flyway-core

5.0.7

plugin

<plugin>

<groupId>org.flywaydb</groupId>

<artifactId>flyway-maven-plugin</artifactId>

<version>5.0.7</version>

</plugin>

1

2

3

4

5

<plugin>

<groupId>org.flywaydb</groupId>

<artifactId>flyway-maven-plugin</artifactId>

<version>5.0.7</version>

</plugin>

3.3 项目配置文件(xml)

方式1:xml配置(无需java代码实现)

demo

XHTML

1

2

3

4

5

6

7

8

方式2:

xml配置

xml

XHTML

1

2

3

4

Java 实现

java

Java

package com.baikeyang.commons.flyway;

import org.flywaydb.core.Flyway;

import javax.sql.DataSource;

/**

* Created with IDEA

* @ClassName MigrationMySql

* @Description TODO

* @Author BaiKeyang

* @Computer lenovo

* @Date 2018/9/14 10:47

* @Version 1.0.0

*/

public class MigrationMySql {

private DataSource dataSource;

public void setDataSource(DataSource dataSource) {

this.dataSource = dataSource;

}

public void migrate() {

//初始化flyway类

Flyway flyway = new Flyway();

//设置加载数据库的相关配置信息

flyway.setDataSource(dataSource);

//设置存放flyway metadata数据的表名,默认"schema_version",可不写

//flyway.setTable("schema_version");

//设置flyway扫描sql升级脚本、java升级脚本的目录路径或包路径,默认"db/migration",可不写

//flyway.setLocations("db/migration");

//设置sql脚本文件的编码,默认"UTF-8",可不写

flyway.setEncoding("UTF-8");

// 针对数据库在同一段时间有修改,但不会造成冲突的情况,通常实际项目中主要存在这样的情况

// 那可以设置flyway.out-of-order=true,这样允许当v1和v3已经被应用后,v2出现时同样也可以被应用

flyway.setOutOfOrder(false);

try {

flyway.clean();

//flyway.setValidateOnMigrate(true);

//flyway.setCleanDisabled(true);

flyway.setBaselineOnMigrate(false);

// 开始执行

flyway.migrate();

} catch (Exception e) {

flyway.repair();

e.printStackTrace();

}

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

packagecom.baikeyang.commons.flyway;

importorg.flywaydb.core.Flyway;

importjavax.sql.DataSource;

/**

* Created with IDEA

* @ClassName MigrationMySql

* @Description TODO

* @Author BaiKeyang

* @Computer lenovo

* @Date 2018/9/14 10:47

* @Version 1.0.0

*/

publicclassMigrationMySql{

privateDataSourcedataSource;

publicvoidsetDataSource(DataSourcedataSource){

this.dataSource=dataSource;

}

publicvoidmigrate(){

//初始化flyway类

Flywayflyway=newFlyway();

//设置加载数据库的相关配置信息

flyway.setDataSource(dataSource);

//设置存放flyway metadata数据的表名,默认"schema_version",可不写

//flyway.setTable("schema_version");

//设置flyway扫描sql升级脚本、java升级脚本的目录路径或包路径,默认"db/migration",可不写

//flyway.setLocations("db/migration");

//设置sql脚本文件的编码,默认"UTF-8",可不写

flyway.setEncoding("UTF-8");

// 针对数据库在同一段时间有修改,但不会造成冲突的情况,通常实际项目中主要存在这样的情况

// 那可以设置flyway.out-of-order=true,这样允许当v1和v3已经被应用后,v2出现时同样也可以被应用

flyway.setOutOfOrder(false);

try{

flyway.clean();

//flyway.setValidateOnMigrate(true);

//flyway.setCleanDisabled(true);

flyway.setBaselineOnMigrate(false);

// 开始执行

flyway.migrate();

}catch(Exceptione){

flyway.repair();

e.printStackTrace();

}

}

}

4 、Flyway与SpringBoot集成

3.1 创建Migration目录

在工程的 src/main/resources 目录下创建db/migration目录(Flyway加载Migrations时的默认Locations)

3.2 Maven配置

dependencies

dependencies

XHTML

org.flywaydb

flyway-core

5.0.7

1

2

3

4

5

org.flywaydb

flyway-core

5.0.7

plugins

plugin

XHTML

org.flywaydb

flyway-maven-plugin

5.0.7

1

2

3

4

5

org.flywaydb

flyway-maven-plugin

5.0.7

3.3 项目配置文件(yml)

yml

yml

Shell

flyway:

baseline-on-migrate: true

locations: db/db,db/db-mock

1

2

3

flyway:

baseline-on-migrate:true

locations:db/db,db/db-mock

Flyway官方地址:https://flywaydb.org

项目地址:https://gitee.com/Mr.bai/Flyway_demo

Flyway中文文档:稍后奉上,敬请期待~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值