编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

springboot集成数据库版本管理工具Flyway

wxchong 2024-06-19 22:25:45 开源技术 28 ℃ 0 评论

我们开发的软件有很好的版本控制、明确的部署流程,但是我们的数据库呢?长时间以来,一直依赖于手动执行sql表结构和数据更改,没有自动化的解决方案。

本次要介绍的便是数据库版本控制工具Flayway,记录数据库所有版本演化和状态变更。启动项目便检查当前数据库版本,如若不是最新便进行Migration 操作,保证各位小伙伴开发基于同一数据库版本,也保证了各个环境如dev、sit、uat数据库一致。

Flyway原理

项目集成Flyway启动后,会首先检查数据库中是否存在Flayway核心记录表flyway_schema_history,如若不存在便创建它。紧接着,扫描项目SQL文件,然后据版本号进行排序,并按顺序记录执行SQL。执行相应SQL后,表记录会更新。当Flyway再次扫描SQL文件时,发现不是最新文件,会忽略本条SQL。这样只要每次创建的SQL文件高于上次版本,下一次启动项目的时候,Flayway会自动更新数据库,实现数据库版本管理。

(sql脚本的格式:V+版本号+双下划线+描述)

详细原理介绍请参考Flyway官网:

https://flywaydb.org/getstarted/how

如何使用

创建springboot工程,以mysql数据库为例,使用JPA,引入Flyway依赖。

注意:

1. springboot2.x对flyway版本要求为5.x

2. MySQL 5.1不再被Flayway Community版本支持,但是Flyway Enterprise版本仍然支持

<dependency>
 <groupId>org.flywaydb</groupId>
 <artifactId>flyway-core</artifactId>
</dependency>
<plugin>
 <groupId>org.flywaydb</groupId>
 <artifactId>flyway-maven-plugin</artifactId>
</plugin>

注意:在同时使用Flayway和JPA的时候,配置文件中不可再配置ddl-auto: update。配置文件如下:

spring:
 datasource:
 driverClassName: com.mysql.jdbc.Driver
 username: your username
 password: your password
 url: jdbc:mysql://localhost:3306/test
 jpa:
 database: mysql
 show-sql: true

在resource目录下创建/db/migration文件夹,放入创建表SQL,注意命名格式:

V1__create_student_tb.sql

use test;
CREATE TABLE student_tb (
 id int(10) NOT NULL AUTO_INCREMENT,
 student_name varchar(10) NOT NULL,
 student_class varchar(50) NOT NULL,
 PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

启动springboot工程,flyway会自动执行以上SQL并记录数据库迁移版本。下次有SQL更新时,命名SQL文件名版本大于V1即可。

其他配置

flyway.baseline-on-migrate:假如已经存在数据库表和记录,设置此参数为true,默认为false
flyway.baseline-version:执行基准迁移时候版本,默认为1
flyway.enabled:是否开启flyway,默认为true
flyway.validate-on-migrate:执行迁移时,是否校验,默认为true
flyway.encoding:设置编码,默认为UTF-8

喜欢就点个爱心吧!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表