Flyway详解以及Springboot集成Flyway(转)

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项目:

加载了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.

————————————————
版权声明:本文为CSDN博主「Jennire_Q」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qiuhao9527/article/details/81070482

原文地址:https://www.cnblogs.com/muxi0407/p/11741977.html

时间: 2024-12-25 18:53:32

Flyway详解以及Springboot集成Flyway(转)的相关文章

QtAndroid详解(6):集成信鸽推送

推送是我们开发移动应用经常用到的功能,Qt on Android 应用也会用到,之前也有朋友问过,这次我们来看看怎么在 Qt on Android 应用中来集成来自腾讯的信鸽推送. 有关信鸽的 SDK 和集成指南,请到这里(http://xg.qq.com/)查看.本文是参考腾讯信鸽的在线帮助完成的.信鸽的 WIKI 和文档已经做得很好了,照着做就是,这里只讲 Qt 中集成信鸽时的步骤和注意事项. 这次我们要写一点点 Java 代码,就几行,如何做,可以参考<Qt on Android核心编程>

iOS开发--Bison详解连连支付集成简书

"最近由于公司项目需要集成连连支付,文档写的不是很清楚,遇到了一些坑,因此记录一下,希望能帮到有需要的人." 前面简单的集成没有遇到什么坑,在此整理一下官方的集成文档,具体步骤如下 导入文件 添加头文件引用 设置link标志Target->Build Setting ,Other Linker Flags 设置为 -all_load可能添加-all_load以后和其他库冲突,可以尝试使用 -force_load 单独load库, force_load后面跟的是 lib库的完整路径

velocity详解

(1)为什么要使用模版语言? 在服务器端可以使用 Velocity 处理模板和生成的动态内容(HTML.XML等).这和 JSP 技术的目标非常接近.但是,JSP 模型可以毫无阻碍地访问底层的 Servlet API 和 Java 编程语言.它基本上是一种在很大程度上开放的访问模型.而作为一种完全自包含的模板引擎和脚本解释器,Velocity 拥有完全封闭的模型.任何针对系统和/或 Java 编程语言的访问都必须明确地启用.默认情况,Velocity 模板中不能访问 Java 编程语言的任何方面

springboot集成redis详解

欢迎扫码加入Java高知群交流 springboot集成redis非常简单 1.引入maven依赖redis包 <!-- springboot整合 redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> 2.appli

SpringBoot详解(一):HelloWorld

# Spring Boot详解(一):HelloWorld Spring Boot使您可以轻松创建可以运行的独立的,生产级的基于Spring的应用程序.Spring Boot的目的是为了简化Spring繁琐的配置,让spring的开发变得更加简单(划重点:更加简单了.所以不要有心理障碍).个人认为从来没有接触过spring的小白,更容易学习spring boot. ## 一.Spring Boot项目的创建 Spring Boot项目创建的方式有三种.(其中第三种方式是最简单的方式,通用与任何开

持续集成(CI)工具------Hudson(Continuous Integration)安装与配置详解

本文允许转载,但请标明出处:http://blog.csdn.net/wanghantong/article/, 版权所有 文章概述: 一. 描述了持续集成工具Hudson的安装与配置 二. 描述了Git .Maven环境的安装与配置 三. 描述了扩展邮件通知及其配置方法 四. 描述了jira的配置 一.Hudson简介 Hudson是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控持续的软件版本发布/测试项目 下载地址:http://eclipse.org/download

无处不在,详解iOS集成第三方登录(SSO授权登录&lt;无需密码&gt;)

1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享:http://www.cnblogs.com/qingche/p/3727559.html 可以和今天的一起集成使用. 2.集成前的准备工作 2.1.去ShareSDK(现为Mob)注册帐号,下载SDK,然后添加自己的应用后得到AppKey 下载地址:http://sharesdk.cn/Download 2.2.申请第三方登录的Appkey 例如: 新浪微博.腾讯微博.QQ.微信.豆瓣应用.人

SpringBoot配置详解

SpringBoot配置详解 SpringBoot自动化配置 在上一节中我们使用Spring Boot实现了一个简单的RESTful API应用,在实现过程中,除了Maven的pom文件的一些配置,我们没有做任何其他的配置,这就是Spring Boot的自动化配置带来的好处,但是,我们还需要了解如何在Spring Boot中修改这些自动化配置的内容,以应对一些特殊的场景需求. 配置文件—Spring Boot支持YAML配置文件和properties配置文件 Spring Boot的默认配置文件

安卓集成发布详解(二)gradle

转自:http://frank-zhu.github.io/android/2015/06/15/android-release_app_build_gradle/ 安卓集成发布详解(二) 15 Jun 2015 上一篇主要讲了安卓版本编译版本发布的过程,本篇主要写版本编译脚本的实现,包括签名文件处理及多渠道版本编译.安卓集成发布详解(一) 一.签名部分编写 gradle本身支持直接签名,只需要在releas部分添加如下代码即可 signingConfigs { debug { } releas