SpringBoot使用Flyway进行数据库管理的操作方法

目录
  • 一、Flyway简介
  • 二、SpringBoot集成使用
    • 1.pom.xml引入依赖
    • 2.application.properties
    • 3.resources创建db数据库脚本文件夹
    • 4.启动DemoApplication主启动类
  • 三、项目整体结构

一、Flyway简介

Flyway是一款数据库迁移(migration)工具。简单点说,就是在你部署应用的时候,帮你执行数据库脚本的工具。Flyway支持SQL和Java两种类型的脚本,你可以将脚本打包到应用程序中,在应用程序启动时,由Flyway来管理这些脚本的执行,这些脚本被Flyway称之为migration。

就目前而言,我们部署应用的流程大概是这样的:

开发人员将应用程序打包、按顺序汇总并整理数据库升级脚本
DBA拿到数据库升级脚本检查、备份、执行,以完成数据库升级
应部署人员拿到应用部署包,备份、替换,以完成应用程序升级
引入Flyway之后的应用部署流程大概是这样的:

开发人员将应用程序打包
应部署人员拿到应用部署包,备份、替换,以完成应用程序升(Flyway将自动执行升级/备份脚本)。

二、SpringBoot集成使用

1.pom.xml引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!-- mysql 依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<!-- 数据库版本管理 依赖 -->
		<dependency>
			<groupId>org.flywaydb</groupId>
			<artifactId>flyway-core</artifactId>
		</dependency>

		<!-- 数据库访问依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<!-- 自动生成get,set方法 依赖 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

2.application.properties

# 端口
server.port=8082

# 数据源
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

# flyway    注:可以完全不用配置
## sql 脚本的位置,默认为 classpath:db/migration。可手动指定
spring.flyway.locations=classpath:db
##  指定数据源,如果没有指定的话,将使用配置的主数据源
spring.flyway.url=jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
## Flyway 管理的 Schema 列表,区分大小写。默认连接对应的默认 Schema
## 如果这里明确指定了库名,那么在 spring.flyway.url 连接中指定的库名将无效
spring.flyway.schemas=test1
## 用户名
spring.flyway.user=root
## 密码
spring.flyway.password=root
## 开启,默认开启
spring.flyway.enabled=true

3.resources创建db数据库脚本文件夹

V0.1.0__init_table.sql

-- 创建表
create table t_startAlarm
(
    id      int(100) primary key not null auto_increment,
    name     varchar(100),
    type      varchar(100)
)

V0.1.1__init_table.sql

-- 初始化数据
INSERT INTO t_startAlarm ( id , name , type ) VALUES
('1','电饭煲','用来蒸饭')

V0.1.2__init_table.sql

-- 初始化数据
INSERT INTO t_startAlarm ( id , name , type ) VALUES
('2','电饭煲2','用来蒸饭2')

4.启动DemoApplication主启动类

4.1只有V0.1.0__init_table.sql和V0.1.1__init_table.sql。
项目启动,Flyway 会自动创建一个 flyway_schema_history 表,这个表用来记录数据库的更新历史。

有了这条记录,下次再启动项目,V0.1.1__init_table.sql 这个脚本文件就不会执行了,因为系统知道这个脚本已经执行过了,如果你还想让 V0.1.1__init_table.sql 脚本再执行一遍,需要手动删除 flyway_schema_history 表中的对应记录,那么项目启动时,这个脚本就会被执行了。

注意:

我们在定义脚本的时候,除了 V 字开头的脚本之外,还有一种 R 字开头的脚本,V 字开头的脚本只会执行一次,而 R字开头的脚本,只要脚本内容发生了变化,启动时候就会执行。

使用了 Flyway之后,如果再想进行数据库版本升级,就不用该以前的数据库脚本了,直接创建新的数据库脚本,项目在启动时检测了有新的更高版本的脚本,就会自动执行,这样,在和其他同事配合工作时,也会方便很多。因为正常我们都是从Git 上拉代码下来,不拉数据库脚本,这样要是有人更新了数据库,其他同事不一定能够收到最新的通知,使用了 Flyway就可以有效避免这个问题了。

所有的脚本,一旦执行了,就会在 flyway_schema_history表中有记录,如果你不小心搞错了,可以手动从 flyway_schema_history 表中删除记录,然后修改 SQL脚本后再重新启动(生产环境不建议)。

测试数据库中结果:


添加V0.1.2__init_table.sql,测试数据库中结果

三、项目整体结构

代码地址链接: SpringbootFlyway

参考文章

https://www.cnblogs.com/wangzh1guo/articles/13834706.html

到此这篇关于SpringBoot使用Flyway进行数据库管理的文章就介绍到这了,更多相关SpringBoot Flyway数据库管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot集成Flyway进行数据库版本迁移管理的步骤

    Flyway简介 Flyway中的迁移(migrations)模式 Flyway对数据库的所有更改都称为 migrations(迁移) . migrations(迁移) 分为版本控制(Versioned)迁移与可重复(Repeatable)的迁移两种, 而版本控制又分为regular(常规)和undo(撤销)两种形式. 版本控制迁移:具有版本号.描述和校验和,且版本是唯一的.描述用于简单记录迁移的内容,校验和用于检测意外更改. 版本控制迁移通常用于以下用途: 创建|更新|删除:表.索引.外键.枚

  • 浅谈SpringBoot之开启数据库迁移的FlyWay使用

    本文介绍了SpringBoot开启数据库迁移的FlyWay使用,分享给大家,具体如下: 一,首先我先了解下FlyWay是如何运转的. 最简单的方案是将Flyway指向一个空数据库. 它将尝试找到其元数据表.当数据库为空时,Flyway将不会找到它, 而是创建它.您现在拥有一个名为SCHEMA_VERSION的单个空表的数据库 : 该表将用于跟踪数据库的状态.之后,Flyway将开始扫描应用程序的文件系统或类路径进行迁移.它们可以用Sql或Java编写. 然后根据其版本号对迁移进行排序,并按顺序应

  • SpringBoot项目集成Flyway进行数据库版本控制的详细教程

    Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式. 第一步:pom.xml添加maven依赖 <!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core --> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <versi

  • SpringBoot使用flyway初始化数据库

    概述 Flyway这款数据库版本工具就算大家没有使用过但也略有耳闻了,SpringBoot对该款工具进行集成的框架可以让我们在启动SpringBoot应用时自动去找SQL版本文件进行比对执行,但在迁移或初始化时往往还是需要先手动进行下数据库的初始化配置,否则会把Unknown database的异常. 为了减少这一步所以个人就以SpringBoot的方式编码在项目的启动时自动进行数据库的初始化,然后再执行版本文件. 自动建库实现步骤 具体思路 SpringBoot的配置项都会有相应的Proper

  • SpringBoot整合Flyway的方法(数据库版本迁移工具)

    Flyway是什么 Flyway是一款开源的数据库版本管理工具,Flyway可以独立于应用实现管理并跟踪数据库的变更,Flyway根据自己的约定,不需要复杂的配置就可以实现数据的Migrate.Migrations可以写成SQL脚本,也可以写在Java代码中,Flyway还支持Spring Boot. 简介 在团队开发当中,有可能每个人都是使用自己本地的数据库.当数据库的表或者字段更新时,往往需要告知团队的其他同事进行更新. Flyway数据库版本迁移工具,目的就是解决该问题而诞生的(我自己想的

  • SpringBoot使用Flyway进行数据库管理的操作方法

    目录 一.Flyway简介 二.SpringBoot集成使用 1.pom.xml引入依赖 2.application.properties 3.resources创建db数据库脚本文件夹 4.启动DemoApplication主启动类 三.项目整体结构 一.Flyway简介 Flyway是一款数据库迁移(migration)工具.简单点说,就是在你部署应用的时候,帮你执行数据库脚本的工具.Flyway支持SQL和Java两种类型的脚本,你可以将脚本打包到应用程序中,在应用程序启动时,由Flywa

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

    Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和java api ,也支持Build构建工具和Spring boot,也可以在分布式环境下能够安全可靠安全地升级数据库,同时也支持失败恢复. Flyway最核心的就是用于记录所有版本演化和状态的MetaData表,Flyway首次启动会创建默认名为SCHEMA_VERSION的元素局表. 表中保存了版本,描述,要执行的sql脚本

  • SpringBoot整合flyway实现自动创建表的方法

    spring boot - v: 2.1.3.RELEASE MySQL - v:5.7 JDK -v : 11 项目结构: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan

  • springboot集成flyway自动创表的详细配置

    Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和java api ,也支持Build构建工具和Spring boot,也可以在分布式环境下能够安全可靠安全地升级数据库,同时也支持失败恢复. Flyway最核心的就是用于记录所有版本演化和状态的MetaData表,Flyway首次启动会创建默认名为SCHEMA_VERSION的元素局表. 表中保存了版本,描述,要执行的sql脚本

  • SpringBoot整合flyway实现步骤解析

    引入依赖 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/

  • springboot 使用QQ邮箱发送邮件的操作方法

    目录 一.QQ邮箱打开POP3/SMTP服务 二.springboot配置 一.QQ邮箱打开POP3/SMTP服务 上面的服务开启后,会得到一串授权密码在springboot配置中需要用到 二.springboot配置 IDE目录 1.在pom.xml添加spring-boot-starter-mail起步依赖 <!-- springboot开发mail项目的起步依赖--> <dependency> <groupId>org.springframework.boot&l

  • SpringBoot集成Jasypt敏感信息加密的操作方法

    目录 前言 哪些信息需要加密 敏感信息加密的作用 选择加密的组件 项目集成Jasypt方式 方式一 方式二 方式三 Springboot整合Jasypt实战 一.引入依赖 二.配置文件中添加Jasypt配置信息 三.使用Jasypt对数据库账号和密码加密,并替换明文. 四.查看执行结果 使用中的一些坑 1.使用jasypt3.0启动时报:Failed to bind properties under ‘xxx.xxx.xxx’ to java.lang.String 2.加解密秘钥如何存储 如何

随机推荐