首页 > 其他分享 >【Flyway】初识Flyway,将Flyway集成于Spring项目

【Flyway】初识Flyway,将Flyway集成于Spring项目

时间:2023-06-14 11:55:37浏览次数:46  
标签:脚本 Spring 数据库 flyway 初识 Flyway sql 执行

什么是Flyway

Flyway官方网站:点击这里

官方描述:

Flyway extends DevOps to your databases to accelerate software delivery and ensure quality code.
-- Flyway 将 DevOps 扩展到您的数据库,以加速软件交付并确保代码质量。
From version control to continuous delivery, Flyway builds on application delivery processes to automate database deployments.
-- 从版本控制到持续交付,Flyway 以应用程序交付流程为基础来自动化数据库部署。

Flyway是一个开源的数据库迁移工具,用于在应用程序的开发周期中管理和跟踪数据库的变化。

数据库迁移是指对数据库结构和数据进行变更的过程,包括创建表、修改表结构、添加数据等操作。在软件开发中,随着应用程序的不断演进和迭代,数据库的结构和数据也需要相应地进行调整和变更。Flyway帮助开发人员更好地管理这些变化,确保数据库与应用程序的版本保持一致。

与Spring集成

1. 引入依赖:

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

2. 于spring配置文件中开启flyway

spring:
  flyway:
    enabled: true

3. 管理sql脚本

目录

Spring项目中,flyway约定将sql脚本置于src/main/resources/db/migration目录下。

sql脚本命名方式

V<version>__<description>.sql

  • 脚本为版本号,可以为数字与小数点的合理组合
    • 如:1, 1.1.1.1.1
  • 为脚本描述信息,可自由填写

效果

db/migration目录下的多个sql脚本执行顺序为依照版本号由小到大执行

项目启动后,若原数据库为空,则按序自动执行全部脚本。

若向db/migration中添加版本号更大的脚本,则再次启动项目后,会执行新增脚本。

规范

  • 脚本版本不能相同
  • 已执行脚本不可变更或删除
  • 默认配置下,不能添加比已执行脚本版本低的脚本

原理

flyway自动在数据库中创建表flyway_schema_history

表内数据:

可以看到,字段包括:

  • 执行位次
  • 版本号
  • 描述信息
  • 脚本类型
  • 脚本名
  • checksum
  • 执行用户
  • 执行时间戳
  • 执行时长
  • 执行是否成功

每次spring项目启动时,flyway模块会做如下操作:

  1. 检查数据库连接
  2. 扫描指定位置(默认为db/migration)脚本并加载
  • 此时会检查文件的命名格式
  1. 检查flyway_schema_history表是否存在,不存在则创建
  2. 进行文件与元数据比对
  • flyway_schema_history中检索最大版本,大于此版本的脚本标记为未执行
  • 比对已执行脚本的checksum,确保未被修改
  1. 执行未执行脚本,每执行一条,就向flyway_schema_history中插入一条元数据

总结

本文简单记录了spring集成flyway的配置方法与使用方式,并阐述了flyway约定的一些规范,最后简单描述了flyway的工作原理。仅供入门参考。

标签:脚本,Spring,数据库,flyway,初识,Flyway,sql,执行
From: https://www.cnblogs.com/hsjia/p/17479689.html

相关文章

  • 基于SpringBoot+MyBatis+Thymeleaf的学生管理系统搭建
    学生管理系统Maven工程搭建【步骤】:打开IDEA工具,选择创建一个新工程。选择SpringInitializr,点击Next按钮。大家也可以通过Spring提供的在线创建的方式创建工程,访问(https://start.spring.io),然后将创建后的工程代码zip包解压后,使用IDEA导入工程。这种方式不在本文描述......
  • SSM框架学习之Spring浅谈(二)
    Spring常用注解@Controller:对应SpringMVC控制层,主要用户接受用户请求并调用Service层返回数据给前端页面。@Service:对应服务层,主要涉及一些复杂的逻辑,需要用到Dao层。@Component:通用的注解,可标注任意类为Spring组件。如果一个Bean不知道属于哪个层,可以使用@......
  • SpringBoot启动类@SpringBootApplication注解
    在springBoot的启动类中,提供了一个mai函数的程序入口,来启动加载SpringBoot程序,那么注解@SpringBootApplication,通过源码可以看到,它相当于@ComponentScan+@EnableAutoConfiguration+@SpringBootConfiguration。通过@SpringBootConfiguration注解的源码得知,其配置了一个@Confi......
  • Spring如何实现事务
    参考:spring事务管理(详解和实例):https://www.cnblogs.com/yixianyixian/p/8372832.htmlSpring事物四种实现方式:基于编程式事务管理实现基于TransactionProxyFactoryBean的声明式事务管理基于AspectJ的XML声明式事务管理基于注解的声明式事务管理参考:https://blog.csdn.net/zhux......
  • SpringBoot自定义线程池
    SpringBoot自定义线程池在SpringBoot中,可以使用@Configuration和@Bean去设置线程池,用@Value去做线程池的参数配置。线程池配置:importcom.google.common.util.concurrent.ThreadFactoryBuilder;importorg.springframework.beans.factory.annotation.Value;importor......
  • Spring 5比Spring4做了哪些改进
    Spring5比Spring4做了哪些改进;【官网说明】https://docs.spring.io/spring/docs/current/spring-framework-reference/Spring4.x新特性1.泛型限定式依赖注入2.核心容器的改进3.web开发增强4.集成BeanValidation1.1(JSR-349)到SpringMVC5.GroovyBean定义DSL6.更好的Jav......
  • springboot+JXLS+Jexl实现报表模版生成报表
    前言做这个项目的思路是由于公司基于自身发展,需要将之前的老项目平台拆解出来,由于之前的项目是所有的功能全部集中在一起,学习成本以及后续的扩展性来说,非常的不友好,并且由于之前设计人员的流失导致了项目无法进一步优化,所以想将其进行拆解,将单个功能模块进行拆分,形成微服务化,使每......
  • Spring boot2 数据访问之Druid数据源+Mybatis
    Mybatis官方地址 1、查找Mybatis相关starter 官方文档 这里注意查找指定版本的Starter 这里以2.2.2为例,查看官方的pom.xml如下:<?xmlversion="1.0"encoding="UTF-8"?><!--Copyright2015-2022theoriginalauthororauthors.Licensedunderthe......
  • springboot~代码风格统计spring-javaformat-maven-plugin插件
    SpringJavaformat是Spring团队开发的一款基于GoogleJavaFormat的代码格式化工具,可以帮助Java开发者自动化进行代码格式化,提高代码质量,降低代码维护成本。SpringJavaformat可以自定义配置文件,支持大量的代码风格配置选项,满足不同项目和团队的需求。还可以与Gradle、Maven、Int......
  • Spring Bean基础
    在接下来的一段时间里,主要分享一些Spring相关的知识文章!Spring官方文档BeanDefinition元信息BeanDefinition是定义Bean的配置元信息接口,主要作用是描述一个Bean,里面存储Bean的相关信息;包括类名、构造器、属性、方法、作用域、自动绑定的模式,生命周期回调等等。概述他的类图继承关......