深入浅析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
投稿

猜你喜欢

  • TCP协议详解_动力节点Java学院整理

    2022-09-22 07:55:14
  • springboot前端传参date类型后台处理的方式

    2023-04-12 16:47:35
  • Java框架之Maven SSM集合

    2022-04-05 16:22:54
  • python调用java模块SmartXLS和jpype修改excel文件的方法

    2023-06-11 16:59:21
  • 深入浅析jni中的java接口使用

    2023-07-22 19:54:23
  • Java JVM内存区域详解

    2021-05-25 18:44:43
  • Java读写Windows共享文件夹的方法实例

    2022-10-02 02:25:45
  • Android 中RecycleView实现item的点击事件

    2023-10-21 18:59:13
  • Hibernate5新特性介绍

    2023-01-02 16:28:09
  • C#服务器NFS共享文件夹搭建与上传图片文件的实现

    2023-01-31 01:19:49
  • Android如何自定义EditText下划线?

    2022-06-27 10:49:07
  • java中mybatis和hibernate的用法总结

    2022-08-23 07:24:38
  • MyBatis传入集合 list 数组 map参数的写法

    2022-12-02 20:21:45
  • 详解java中各类锁的机制

    2022-08-01 06:48:56
  • 使用SpringBoot+EasyExcel+Vue实现excel表格的导入和导出详解

    2023-07-18 18:15:14
  • 完美解决SpringCloud-OpenFeign使用okhttp替换不生效问题

    2023-07-03 11:27:25
  • mybatis-plus多表联查join的实现

    2023-11-24 06:49:56
  • Java8中Stream的一些神操作

    2021-11-18 19:07:21
  • 使用Maven搭建Hadoop开发环境

    2021-09-11 07:55:45
  • 详解maven的setting配置文件中mirror和repository的区别

    2022-03-19 11:56:42
  • asp之家 软件编程 m.aspxhome.com