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

Flyway是一个开源的数据库版本管理工具,并且极力主张“约定大于配置”,简单、专注、强大。接下来通过本文给大家介绍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引入依赖

4.0.0org.springframework.bootspring-boot-starter-parent2.0.3.RELEASEcom.exampledemo0.0.1-SNAPSHOTdemoDemo project for Spring Boot1.8org.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-testtestMysqLmysql-connector-javaorg.flywaydbflyway-coreorg.springframework.bootspring-boot-starter-jdbcorg.projectlomboklombokorg.springframework.bootspring-boot-maven-plugin

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

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...