#IT明星不是梦#【从0开始Web开发实战】SpringBoot集成Flyway,版本化管理数据库

目录:

1. SpringBoot集成Flyway

2. 添加SQL脚本

3. 数据库版本信息

4. 常见错误和解决方法


SpringBoot是使用最多的Java开发框架,特点是自动化配置依赖模块,提供的一系列starter脚手架便于使用,充分体现了“开箱即用”和“约定优于配置”原则。


Flyway是一个数据库版本化管理工具,通过SQL脚本实现DB Migration自动化升级,支持独立运行,也可以和构建工具或者Spring开发环境集成。本文分享SpringBoot集成Flyway的配置方法,以及项目中的使用示例。


代码下载:https://github.com/jextop/StarterApi/

项目和SQL文件:

├── pom.sh

├── src/main/resources

│   ├── application.yml

│   └── db/migration

│       ├── V1.0.0_init.sql

│       └── V1.0.1_user.sql



代码文件

功能要点

SpringBoot集成Flyway

pom.xml

引入Flyway依赖flyway-core

application.yml

配置数据源,也可以指定独立的Flyway配置。

resources\db\migration\

SQL脚本,比如V1.0.0__init.sql,名称规则可配置。

数据库版本信息

数据表:flyway_schema_history

Flyway记录Migration信息和状态,数据表名称可配置。

一,SpringBoot集成Flyway

1. 新建SpringBoot项目时,选中Flyway,将自动添加Flyway依赖。

 image.png

2. 已有SpringBoot项目,可以在pom.xml中直接引用Flyway:

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

3. application.yml中配置数据源以及Flyway:

spring:
  flyway:
    locations: ["classpath:db/migration"]
    table: flyway_schema_history

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/starter?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC
    username: root
    password: root

二,添加SQL脚本:resources\db\migration\

脚本文件路径和命名规则都可以配置,注意版本号递增,默认为:V+版本号+双下划线+描述

 image.png

三,数据库版本信息

启动程序时,Flyway自动检查并运行SQL脚本

 image.png

Flyway将版本信息和状态保存到数据表flyway_schema_history

image.png


四,实际开发过程中常见错误,分享解决方法和建议:

migrate运行失败,提示sql脚本错误

解决:独立运行flyway命令repair修复数据库中的升级信息,纠正SQL错误后再次migrate

建议:运行migrate之前,首先确保SQL正确。


migrate没有运行增加的SQL脚本

解决:SQL脚本命名遵守规则,比如V1.0.0__init.sql


migrate运行失败,提示权限不够“xxx command denied to user ‘xxx’”

解决:账号需要拥有对应sql脚本需要的权限,比如create table


migrate运行失败,提示数据库不空“Found non-empty schema(s)”

解决:按照提示独立运行flyway命令baseline初始化。

建议:清空数据库,初始化从空数据库开始。


提示找不到数据库“unkown database ‘xxx’”

解决:需要先创建出来一个空数据库。


Spring集成Flyway后,清空数据,启动失败

解决:确认validationQuery,是否select 1 from dual还是某个指定的数据表。空数据库时需使用dual


Spring集成Flyway后,启动运行出错

解决:某些依赖数据库的bean,需要指定在Flyway完成migrate之后运行


SQL脚本V1.0__xxx.sql没有被运行

解决:Flyway通过版本号码唯一区分脚本,如果最开始运行baseline,Flyway将自动创建版本1.0

建议:1,从空数据库开始初始化,不要运行baseline

建议:2,初始化SQL脚本版本号从V1.0.1开始,使用三位数字。


--------------------------------

如果您觉得这篇文章对您有帮助,请点个“赞”,博主感激不尽!

Jext技术社区专注领域:软件工程实践,JIRA研发管理分布式系统架构,软件质量保障

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章