深入浅析java中flyway使用简介

作者:勤而思 时间:2022-06-05 20:45:45 

https://www.jb51.net/article/191716.htm 此篇博文对flyway讲解的很清楚了,我在这只是稍微增加一些说明;因此,看这个文档前先仔细看一下这篇博文。

1、下载flyway地址:https://flywaydb.org/getstarted/download

软件是免安装的,文件目录结构:

2、修改配置文件

在conf目录下有一个flyway.conf文件,里面有数据库的配置:

3、使用

我在这里是使用的是命令行的方式,具体在gradle里配置使用方式还不太清楚,下面简述一下命令的使用。

3.1、flyway migrate

此命令会自动检查数据库脚本是否有变化,如果有变化,则执行脚本,更新数据库版本,如果数据库初始状态是空库,则会自动创建schema_version 表,用于存储数据库操作的版本记录,

只要数据库脚本有变化,都需要执行此命令。 

3.2、flyway clean

清除schema_version中记录所有表结构,视图,存储过程,函数以及所有的数据等都会被清除。

3.3、flyway info

打印schema_version中记录信息

3.4、flyway validate

Validate是指验证已经Apply的Migrations是否有变更,Flyway是默认是开启验证的。

3.5、flyway baseline

Baseline 是指数据库非空状态下使用flyway首先执行的命令,用于创建schema_vision表。

3.6、flyway repair

Repair会修复Metadata表的错误,通常有两种用途:

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

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

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

Flyway主要基于6种基本命令:

Migrate, Clean, Info, Validate, Baseline and Repair,稍候会逐一分析讲解。

目前支持的数据库主要有:

Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL(including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL(including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix.

补充:下面再给大家介绍下flyway使用简介

官网

https://flywaydb.org/

背景

Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。

流程

1、 首先配置好flyway的基本信息后,运行项目,会在数据库表中默认新建一个数据表用于存储flyway的运行信息,默认的数据库名:flyway_schema_history

2、 紧接着Flyway将开始扫描文件系统或应用程序的类路径进行迁移。然后,Flyway的数据迁移将基于对用sql脚本的版本号进行排序,并按顺序应用:

可以看到执行数据库表后在checksum中储存一个数值,用于在之后运行过程中对比sql文件执行是否有变化。

注意:

flyway在执行脚本时,会在源数据表中检查checksum值,并确定上次运行到哪一个脚本文件,本次执行时从下一条脚本文件开始执行。所以编写脚本的时候不要去修改原有的脚本内容,并且新的脚本版本号要连续

集成SpringBoot

1.添加依赖


<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.1.1</version>
</dependency>

添加插件:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>5.1.1</version>
</plugin>

2.命名规范
sql 脚本存放目录:src/main/resources/db/migration
对应一个程序版本的多个脚本,从1开始,比如1.0.9版本,有多个任务:张三负责a任务(tapd号为1111111),李四负责b任务(tapd号为222222),他们的任务都涉及到db更新他们会分别创建两个脚本:
V1.0.9.0.1__1111111.sql
V1.0.9.0.2__222222.sql
说明:V大写,中间是两个下划线(__)

常见问题

1、可以基于环境变量,实现不同的环境,做不同的初始化脚本吗?
 基于我们的配置中 心,可以对flyway.locations配置进行修改,不同环境的初始化脚本可以放到不同的目录下。

2、初始化数据过程会发生错误回滚?
 每 一个sql 文件会有 一个单独的事物,如果单个文件中发 生错误,单个文件的操作会回滚, 比如有1、2、3个 文件,第 二个文件发生错误,第二个文件所有操作将会回滚,第三个文件不会执行。但: Unfortunately, today only DB2, PostgreSQL, Derby, EnterpriseDB and to a certain extent SQL Server support DDL statements  inside a transaction。 所以,建议不要把ddl 文件和dml语句句放到同 一个文件 里,避免不必要的麻烦。

3、多个节点能够并行执行migration吗?
 当然可以!Flyway使用数据库锁机制(locking technology of your database)来协调多个节点,从而保证多套应用程序可同时执行migration,而且集群控制也可做配置。

来源:https://blog.csdn.net/wen1652166675/article/details/74188486

标签:java,flyway,使用
0
投稿

猜你喜欢

  • c# 复写Equals方法的实现

    2023-06-09 01:35:35
  • Android中Activity之间跳转和参数传递的实例

    2023-01-31 21:40:32
  • C# 嵌入dll 的方法

    2022-11-06 08:39:10
  • springboot logback调整mybatis日志级别无效的解决

    2023-05-03 05:36:21
  • C#使用Objects Comparer进行对象比较

    2022-06-03 05:40:30
  • 两分钟解决IntelliJ IDEA中文乱码问题(推荐)

    2022-11-09 00:08:15
  • Unity OnGUI实时显示游戏FPS

    2021-10-05 22:53:39
  • SpringBoot集成POI实现Excel导入导出的示例详解

    2022-12-05 19:09:10
  • Log4j.properties配置及其使用

    2023-05-14 21:06:18
  • 通过实例解析java8中的parallelStream

    2022-04-17 12:59:37
  • Java 获取网络302重定向URL的方法

    2022-03-25 15:19:46
  • SpringBoot异常处理器的使用与添加员工功能实现流程介绍

    2021-10-21 19:24:23
  • 导入项目出现Java多个工程相互引用异常A cycle was detected in the build path of project的解决办法

    2023-06-26 16:27:17
  • Unity之绕轴进行旋转的操作

    2021-11-14 17:53:10
  • 基于springmvc之常用注解,操作传入参数

    2023-03-17 20:49:52
  • c# 委托和事件实例学习

    2023-07-04 06:25:58
  • C# Ini文件操作实例

    2022-12-31 00:37:45
  • Android CountDownTimer实现定时器和倒计时效果

    2023-12-09 02:11:28
  • 用C#缩小照片上传到各种空间的具体方法

    2022-03-28 02:29:18
  • 深入浅析Spring 的aop实现原理

    2023-01-10 00:00:10
  • asp之家 软件编程 m.aspxhome.com