Flyway详解及Springboot集成Flyway的详细教程

作者:Jennire_Q 时间:2022-09-21 10:37:49 

Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里;不仅支持Command Line和java api ,也支持Build构建工具和Spring boot,也可以在分布式环境下能够安全可靠安全地升级数据库,同时也支持失败恢复。

Flyway最核心的就是用于记录所有版本演化和状态的MetaData表,Flyway首次启动会创建默认名为SCHEMA_VERSION的元素局表。 表中保存了版本,描述,要执行的sql脚本等;

sql脚本的格式:V+版本号 +双下划线+秒速+结束符 

例如:V1__INIT_DATABASE.sql

上面的V 是默认值, 可以通过

 flyway.sql-migration-prefix来指定前缀

Migrate:

Migrate是指把数据Schema迁移到最新版本,在Migrate时会检查MetaData元数据表,如果不存在就创建MetaData表,MetaData用于记录数据库历史变更等信息;

Migrate会扫描指定文件系统或者classpath下的Migrations。会与MetaData中的记录进行对比,进行版本升级;

Clean:清除掉对应数据库Schema中所有的对象,包括表结构,视图,存储过程等,clean操作在dev 和 test阶段很好用;

Info:用于打印所有的Migrations的详细和状态信息,也是通过MetaData和Migrations完成的,可以快速定位当前的数据库版本;

validate:验证以及apply的Migrations是否有变更,默认开启的;原理是对比MetaData表与本地Migrations的checkNum值,如果值相同则验证通过,否则失败。

BaseLine:对已经存在数据库Schema结构的数据库一种解决方案。实现在非空数据库新建MetaData表,并把Migrations应用到该数据库;也可以应用到已有表结构的数据库中也可以实现添加Metadata表。

repair:repair操作能够修复metaData表,该操作在metadata出现错误时很有用

用途:

  1):移除失败的Migration记录,只针对不支持DDL事务的数据库

使用Flayway:

1、引入flyway的依赖:


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

<plugin>
   <groupId>org.flywaydb</groupId>
   <artifactId>flyway-maven-plugin</artifactId>
   <version>5.0.3</version>
  </plugin>

2、新建一个maven的Springboot项目,在配置文件中配置数据源信息:


server.port=8088
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3、在classpath下新建/db/migration文件夹,并创建sql脚本文件:


use testdb;

CREATE TABLE person (
id int(11) NOT NULL AUTO_INCREMENT,
first varchar(100) NOT NULL,
last varchar(100) NOT NULL,
dateofbirth DATE DEFAULT null,
placeofbirth varchar(100) not null,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into person (first,last,dateofbirth,placeofbirth) values('Dursun','KOC', STR_TO_DATE('02/10/1982', '%m/%d/%Y'),'Erzincan');
insert into person (first,last,dateofbirth,placeofbirth) values('Durseeun','KeeOC', STR_TO_DATE('05/10/1982', '%m/%d/%Y'),'Erzeeincan');

4、启动springboot项目:

Flyway详解及Springboot集成Flyway的详细教程

加载了sql脚本 。

5、查看数据库:

生成了flyway-schema-history表,这个版本默认是这个表,如果想自己指定schema表的命,可以设置:


flyway.tableflyway

6:flyway的一些其他配置:


flyway.baseline-description对执行迁移时基准版本的描述.
flyway.baseline-on-migrate当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.
flyway.baseline-version开始执行基准迁移时对现有的schema的版本打标签,默认值为1.
flyway.check-location检查迁移脚本的位置是否存在,默认false.
flyway.clean-on-validation-error当发现校验错误时是否自动调用clean,默认false.
flyway.enabled是否开启flywary,默认true.
flyway.encoding设置迁移时的编码,默认UTF-8.
flyway.ignore-failed-future-migration当读取元数据表时是否忽略错误的迁移,默认false.
flyway.init-sqls当初始化好连接时要执行的SQL.
flyway.locations迁移脚本的位置,默认db/migration.
flyway.out-of-order是否允许无序的迁移,默认false.
flyway.password目标数据库的密码.
flyway.placeholder-prefix设置每个placeholder的前缀,默认${.
flyway.placeholder-replacementplaceholders是否要被替换,默认true.
flyway.placeholder-suffix设置每个placeholder的后缀,默认}.
flyway.placeholders.[placeholder name]设置placeholder的value
flyway.schemas设定需要flywary迁移的schema,大小写敏感,默认为连接默认的schema.
flyway.sql-migration-prefix迁移文件的前缀,默认为V.
flyway.sql-migration-separator迁移脚本的文件名分隔符,默认__
flyway.sql-migration-suffix迁移脚本的后缀,默认为.sql
flyway.tableflyway使用的元数据表名,默认为schema_version
flyway.target迁移时使用的目标版本,默认为latest version
flyway.url迁移时使用的JDBC URL,如果没有指定的话,将使用配置的主数据源
flyway.user迁移数据库的用户名
flyway.validate-on-migrate迁移时是否校验,默认为true.

flyway的入门就到这里,其他内容后面再补上。

来源:https://blog.csdn.net/qiuhao9527/article/details/81070482

标签:Flyway,Springboot,Flyway
0
投稿

猜你喜欢

  • C#找不到类型名"SqlConnection"的有效解决方法

    2022-05-10 09:47:26
  • 获取Android系统唯一识别码的方法

    2022-08-09 22:20:45
  • Android实现流动的渐变色边框效果

    2023-06-28 08:24:13
  • Android实现仿360桌面悬浮清理内存

    2021-08-25 11:21:05
  • Android Studio新建工程默认在build.gradle中加入maven阿里源的问题

    2023-04-02 06:33:32
  • 在SpringBoot中通过jasypt进行加密解密的方法

    2023-11-15 21:29:23
  • java实现科研信息管理系统

    2022-05-13 02:49:41
  • Java 8 lambda表达式引入详解及实例

    2022-10-25 22:41:37
  • RocketMQ生产者一个应用不能发送多个NameServer消息解决

    2022-05-18 15:56:11
  • 为Android的apk应用程序文件加壳以防止反编译的教程

    2023-10-23 23:49:10
  • c#测试本机sql运算速度的代码示例分享

    2022-10-18 00:04:24
  • java高并发之线程组详解

    2023-02-15 21:30:25
  • 基于javaMybatis存进时间戳的问题

    2023-11-29 02:55:51
  • windows如何使用bat脚本后台启动/停止和重启jar包服务

    2022-02-27 12:28:36
  • log4j配置失效日志中打印Debug信息问题

    2022-10-12 10:13:12
  • Swing拆分窗格控件JSplitPane使用详解

    2022-11-14 21:13:48
  • Android外部存储无法访问问题解决方法

    2021-12-17 06:52:12
  • logback之自定义指定日志文件存储目录方式

    2022-05-11 15:05:19
  • 详解Java豆瓣电影爬虫——小爬虫成长记(附源码)

    2023-10-29 17:45:17
  • Android调用相机并将照片存储到sd卡上实现方法

    2023-11-06 00:41:41
  • asp之家 软件编程 m.aspxhome.com