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

Flyway是一个开源的数据库版本管理工具,并且极力主张“约定大于配置”,简单、专注、强大。接下来通过本文给大家介绍SpringBoot使用Flyway进行数据库管理的方法,感兴趣的朋友一起看看吧

一、Flyway简介

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

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

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

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

二、SpringBoot集成使用

1.pom.xml引入依赖

   4.0.0 org.springframework.bootspring-boot-starter-parent2.0.3.RELEASEcom.exampledemo0.0.1-SNAPSHOTdemoDemo project for Spring Boot 1.8  org.springframework.bootspring-boot-starter org.springframework.bootspring-boot-starter-testtest mysqlmysql-connector-java org.flywaydbflyway-core org.springframework.bootspring-boot-starter-jdbc org.projectlomboklombok   org.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

以上就是SpringBoot使用Flyway进行数据库管理的操作方法的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java