每次服务的代码更新部署,难免会存在数据库结构
的变更以及字典数据的添加
,手动执行更新脚本
是一个耗时耗力
的工作,而且还会出现遗漏或者其他状况,SpringBoot
内部集成了一个自动执行数据库脚本的第三方依赖Flyway
来解决这个繁琐的问题。
什么是Flyway
官网给出的定义是`Version control for your database.
Robust schema evolution across all your environments.
With ease, pleasure and plain SQL.`(数据库的版本控制,在所有环境中进行稳健的架构演变,轻松,愉快和简单的SQL。)
Flyway
是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。
Flyway
可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations
可以写成 SQL 脚本
,也可以写在 Java 代码中,不仅支持 Command Line
和 Java API
,还支持 Build 构建工具和 Spring Boot
等,同时在分布式环境下能够安全可靠地升级数据库
,同时也支持失败恢复
等。
Flyway运行原理
当我们运行配置使用Flyway
的应用程序时,会自动在配置数据源的数据库内创建一个名为
flyway_schema_history的表,该表内存放了数据库的历史记录
信息。
然后通过扫码应用程序的/reosurces/db/migration
目录下的历史版本脚本SQL文件,文件格式为:V?__desc.sql
,如:V1__init-db.sql
,根据版本号进行排序后,获取最大的版本号与flyway_schema_history
表内执行成功的最大版本号进行比对,如果项目内版本较高,则自动执行脚本文件。
创建项目
通过idea
工具创建SpringBoot
项目,在pom.xml
添加相关依赖如下所示:
org.springframework.bootspring-boot-starterorg.flywaydbflyway-coreorg.springframework.bootspring-boot-starter-jdbccom.zaxxerHikariCPmysqlmysql-connector-javaruntimeorg.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-engine
添加数据库配置
在application.yml
配置文件内添加数据源信息,如下所示:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/flyway
username: root
password: 123456
type: com.zaxxer.hikari.HikariDataSource
添加Flyway版本脚本
脚本比较简单,大家可以任意添加一些SQL来查看结构或者数据变动。
db.migration
目录是SpringBoot
在整合Flyway
时默认读取版本脚本的目录,我们可以在application.yml
配置spring.flyway.locations
参数进行修改。
测试
当我们启动项目时,会自动比对脚本的版本,在db.migration
目录内找到V1.1__add_logging.sql
为最高版本,拿着1.1
再去flyway_schema_history
表内执行成功最大的版本比对,如果低于1.1
则自动执行V1.1_add_logging.sql
脚本内容,否则跳过。
flyway_schema_history表
每次启动项目如果存在可更新的脚本信息,执行完成后会自动在flyway_schema_history
表内添加一条记录。
installed_rank | version | description | type | script | checksum | installed_by | installed_on | execute_time | success |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | init | SQL | V1__init.sql | 2034194600 | root | 2019-10-23 21:44:36 | 17 | 1 |
2 | 1.1 | add logging | SQL | V1.1_add_logging.sql | 1859098444 | root | 2019-10-23 21:46:50 | 54 | 1 |
敲黑板,划重点
本章简单的介绍了Flyway
的基本使用方法,它很强大,功能远远不止于此,使用脚本统一自动执行可大大减少手动执行出现的遗漏、错误等。
存在既有道理,为什么不尝试使用呢?
审核编辑 黄昊宇
-
JAVA
+关注
关注
19文章
2978浏览量
105290 -
数据库
+关注
关注
7文章
3855浏览量
64797 -
spring
+关注
关注
0文章
340浏览量
14424 -
MySQL
+关注
关注
1文章
831浏览量
26779
发布评论请先 登录
相关推荐
MySQL数据库的安装
![MySQL<b class='flag-5'>数据库</b>的安装](https://file1.elecfans.com/web3/M00/05/E2/wKgZPGeF2XWAe83fAAAW9lhgvGk652.jpg)
云数据库是哪种数据库类型?
SSM与Hibernate的整合使用
数据库数据恢复—MYSQL数据库ibdata1文件损坏的数据恢复案例
数据库数据恢复—通过拼接数据库碎片恢复SQLserver数据库
![<b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—通过拼接<b class='flag-5'>数据库</b>碎片恢复SQLserver<b class='flag-5'>数据库</b>](https://file1.elecfans.com/web1/M00/F4/07/wKgaoWcjE32AbQdWAAJD_hojvJc119.png)
Oracle数据恢复—异常断电后Oracle数据库启库报错的数据恢复案例
![Oracle<b class='flag-5'>数据</b>恢复—异常断电后Oracle<b class='flag-5'>数据库</b>启<b class='flag-5'>库</b>报错的<b class='flag-5'>数据</b>恢复案例](https://file1.elecfans.com/web2/M00/08/B8/wKgZomb6Ns-AbiICAAFlXAFpKKU086.png)
数据库数据恢复—SQL Server数据库出现823错误的数据恢复案例
![<b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—SQL Server<b class='flag-5'>数据库</b>出现823错误的<b class='flag-5'>数据</b>恢复案例](https://file1.elecfans.com/web2/M00/07/F4/wKgaombs78mANJ1GAAPeSoXHVPE244.png)
启明信息完成国产化Doris数据库升级替代任务
数据库数据恢复—raid5阵列上层Sql Server数据库数据恢复案例
![<b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—raid5阵列上层Sql Server<b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复案例](https://file.elecfans.com/web2/M00/A2/AD/pYYBAGRLbSSAHhFWAAI9vWNRQec919.png)
MongoDB数据恢复—MongoDB数据库文件损坏的数据恢复案例
![MongoDB<b class='flag-5'>数据</b>恢复—MongoDB<b class='flag-5'>数据库</b>文件损坏的<b class='flag-5'>数据</b>恢复案例](https://file.elecfans.com/web2/M00/9F/F3/poYBAGQ-Pg6AWHFxAAJ9VHkTNrk678.png)
评论