flyway详解以及springboot集成flyway,数据库脚本版本管理(代码片段)

zyh-smile zyh-smile     2023-03-19     250

关键词:

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>

如果是springboot 2.xx,使用

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

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;

 

4、启动springboot项目:

技术图片

加载了sql脚本 。

5、查看数据库:

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

flyway.tableflyway

6:flyway的一些其他配置:

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

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

springboot集成flyway,数据库是oracle

一.springboot2.x,oracle11,用flyway5.x的报错,后来用了4.x的在dependencies加入了oracle和flyway的配置<dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2 查看详情

Flyway 和 Spring Boot 集成

】Flyway和SpringBoot集成【英文标题】:FlywayandSpringBootintegration【发布时间】:2015-05-2905:29:12【问题描述】:我尝试在SpringBoot项目中使用Hibernate和SpringJPA集成Flyway以进行迁移。我收到以下异常:org.springframework.beans.factory.BeanCreationExc... 查看详情

springboot集成flyway实现数据库版本控制?

...家介绍一款比较好用的数据库版本控制工具Flyway。在通过SpringBoot构建微服务的过程中,一般情况下在拆分微服务的同时,也会按照系统功能的边界对其依存的数据库进行拆分。在这种情况下,微服务的数据库版本管理对于研发... 查看详情

SpringBoot - Flyway - JPA 集成 - 创建名称为“flywayInitializer”的 bean 时出错 - information_schema 中的未知表“事件”

】SpringBoot-Flyway-JPA集成-创建名称为“flywayInitializer”的bean时出错-information_schema中的未知表“事件”【英文标题】:SpringBoot-Flyway-JPAintegration--Errorcreatingbeanwithname\'flywayInitializer\'-Unknowntable\'events\'ininformation_schema【发布时间 查看详情

springboot系列集成thymeleaf详解版(代码片段)

1.thymeleaf简介 1.Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。 2.Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板-HTML可以在浏览器中正确显示,也可以作为静态原型工作,从而可以在开发团队中... 查看详情

Spring boot 和 Flyway:集成测试前清除数据库数据

】Springboot和Flyway:集成测试前清除数据库数据【英文标题】:SpringbootandFlyway:Cleardatabasedatabeforeintegrationtests【发布时间】:2018-11-2716:15:35【问题描述】:我正在使用SpringBoot框架(v2.0.2)构建REST服务,其中我在数据库上运行了集成... 查看详情

Flyway 与 Spring Boot 的集成不会在嵌入式 H2 数据库上执行迁移脚本

】Flyway与SpringBoot的集成不会在嵌入式H2数据库上执行迁移脚本【英文标题】:Flywayintegrationwithspringbootdoesn\'texecutemigrationscriptsonembeddedH2database【发布时间】:2018-10-1708:14:30【问题描述】:我正在尝试使用Flyway在SpringBoot应用程序中... 查看详情

springboot项目集成redis详解

参考技术A遵循我们springboot开发三板斧这里我们使自己的redis配置类,里面已经对默认的序列化方式做了修改可以直接用于工作使用指定我们写好的redisTemplate即可,一把工作中redis的api会封装成工具类使用到这里,我们就可以在... 查看详情

详解springboot集成mybatis(代码片段)

在下文中详细叙述了SpringBoot集成Mybatis过程,在实现实验的基础上有些步骤可以进一步简化,加速开发过程。1、lombok插件使用https://blog.csdn.net/daniaoxp/article/details/119381941在第5步骤中新建了Student类,设置了id,name&#x... 查看详情

使用 Flyway 和 Spring Boot 迁移基线

】使用Flyway和SpringBoot迁移基线【英文标题】:baseline-on-migratewithFlywayandSpringBoot【发布时间】:2019-08-0709:02:22【问题描述】:我之前看过这个帖子,但我已经实施了所提供的解决方案,所以我再次询问我的具体情况的更多细节。... 查看详情

将 Flyway 设置为在 Spring Boot 中使用不同的环境

】将Flyway设置为在SpringBoot中使用不同的环境【英文标题】:SetFlywaytoworkwithdifferentenvironmentsinSpringBoot【发布时间】:2021-10-2420:00:12【问题描述】:我有一个SpringBoot应用程序,我需要将Flyway集成到其中。我希望Flyway迁移在应用程序... 查看详情

详解springboot集成mybatis(代码片段)

1、新建springboot模块先新建一个空项目,在空项目中新建一个子模块。-选择合适的java版本,默认使用spring官方服务器-注意第4个红框-在项目中可以根据需要添加依赖-因为要集成mybatis,所以要添加数据库,特别是... 查看详情

使用 Flyway 进行集成测试

】使用Flyway进行集成测试【英文标题】:IntegrationTestingwithFlyway【发布时间】:2015-12-2813:26:15【问题描述】:我正在使用Flyway来处理数据库迁移。一切正常:迁移文件的默认位置是:main/resource/db/migration/V1...我正在运行集成测试,... 查看详情

带有用户名和密码的 Zonky + Spring Boot + Postgres + Flyway

】带有用户名和密码的Zonky+SpringBoot+Postgres+Flyway【英文标题】:Zonky+SpringBoot+Postgres+FlywaywithUsernameandPassword【发布时间】:2019-11-2209:48:01【问题描述】:我们正在使用Zonky对由Postgres和Flyway支持的SpringBoot应用程序进行集成测试。一... 查看详情

在每次测试之前触发 Flyway 迁移

...chtest【发布时间】:2020-12-2019:43:29【问题描述】:我正在SpringBoot项目中实现集成测试套件。我的项目正在使用Flyway进行数据库迁移。我的测试类看起来像这样:@SpringBootTest@AutoConfigureMockMvc@TestcontainersinternalclassM 查看详情

springsecurity应用详解(集成springboot)(代码片段)

SpringSecurity应用详解集成SpringBoot工作原理认证流程授权流程集成SpringBoot1.SpringBoot介绍SpringBoot是一套Spring的快速开发框架,基于Spring4.0设计,使用SpringBoot开发可以避免一些繁琐的工程搭建和配置,同时它集成了大量的... 查看详情

springsecurity应用详解(集成springboot)(代码片段)

SpringSecurity应用详解集成SpringBoot工作原理认证流程授权流程集成SpringBoot1.SpringBoot介绍SpringBoot是一套Spring的快速开发框架,基于Spring4.0设计,使用SpringBoot开发可以避免一些繁琐的工程搭建和配置,同时它集成了大量的... 查看详情

springboot整合flyway

SpringBoot整合Flyway数据库版本迁移工具使用Flyway官网:https://flywaydb.org/documentation/使用感想:数据库的传统部署到自动化部署,工具的便利性使的开发更具效率性!简介:Flyway是一个开源数据库迁移工具。与配置相比,它极力主张... 查看详情