热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot2.3整合Flyway实现数据库版本管理

1.概述Flyway用于数据库版本控制,官网这样解释Robustschemaevolutionacrossallyourenvironments.With

1. 概述

Flyway用于数据库版本控制,官网这样解释Robust schema evolution across all your environments.With ease, pleasure, and plain SQL。更多介绍,请参阅Flyway官网。Flyway是一个开源的数据库迁移工具,它更倾向于简单和约定优于配置的方式,迁移数据可以写成SQL或者java程序,支持多种接入方式,例如命令行客户端、Java API、Maven构建、Gradle构建等


2. 核心依赖

新建一个springboot项目,在pom.xml文件中引入核心依赖

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.flywaydbgroupId>
<artifactId>flyway-coreartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>

3. yml配置文件

spring:
application:
name: springboot-flyway
datasource:
type: com.mysql.cj.jdbc.MysqlDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://xx.xx.xx.xx:3306/springboot?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezOne=GMT%2B8
username: 用户名
password: 密码
hikari:
minimum-idle: 5 #最小空闲连接数
idle-timeout: 180000 #空闲连接存活最大时间,默认600000
maximum-pool-size: 10 #连接池最大连接数
auto-commit: true #自动提交 默认true
pool-name: HikariCP #连接池名称
max-lifetime: 1800000 #连接池最长生命周期,0表示无限生命周期,默认1800000(30分钟)
connection-timeout: 30000 #连接超时时间,默认30000
connection-test-query: SELECT 1
flyway:
enabled: true #是否开启,默认true
check-location: true #是否开启路径校验,默认true
locations:
- classpath:db/migration #sql文件存放路径,默认classpath:db/migration
encoding: UTF-8 #编码
baseline-on-migrate: true #表结构存在,flyway记录表不存在时须开启
table: flyway_schema_history #flyway记录表名称,默认flyway_schema_history
baseline-version: 0 #基础版本,默认1
validate-on-migrate: true #开启sql文件校验,默认true
clean-disabled: false #是否禁用清除,默认false,生产环境不可清除数据,必须为true
clean-on-validation-error: false #发生验证错误时,是否执行清除,默认false,生产环境不可开启
sql-migration-prefix: V #sql文件前缀,默认V
sql-migration-separator: __ #sql文件分隔符,默认__
sql-migration-suffixes: .sql #sql文件后缀,默认.sql

注意:sql文件中有版本号为1时,baseline-version版本号配置为0
更多配置可参阅官网配置信息


4. SQL文件

在resources目录下新建db/migration目录,并新建两个sql文件V1__schema.sql和V2__data.sql

CREATE TABLE emp_info (
id BIGINT UNSIGNED auto_increment NOT NULL COMMENT '主键ID',
emp_code varchar(30) NULL COMMENT '员工编码',
emp_name varchar(30) NULL COMMENT '员工名称',
sex TINYINT NULL COMMENT '性别0:男;1:女;2:未知',
phone varchar(11) NULL COMMENT '手机号',
CONSTRAINT emp_info_pk PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工信息表';

INSERT INTO emp_info (id, emp_code, emp_name, sex, phone) VALUES(NULL, '10001', '张三', 0, '13098783567');

注意:sql文件命名规则是V + 版本号 + 双下划线(__) + 文件名 + .sql


5. 验证

编写主启动类,启动SpringBoot项目
数据库中会新建表flyway_schema_history,表中会记录执行sql的信息。并执行sql文件中的sql
Flyway记录表



推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 无论是在迁移到云服务还是更换云服务商的过程中,数据迁移都是一个至关重要的环节。本文将探讨数据迁移中可能遇到的问题及解决方案,包括路径问题、速度问题和数据完整性等。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 一、Tomcat安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat8.0\webapps二、Tomcat8.0配置多个端口,其实也就是给T ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 如何在MySQL中选择合适的表空间以优化性能和管理效率
    在MySQL中,合理选择表空间对于提升表的管理和访问性能至关重要。表空间作为MySQL中用于组织和管理数据的一种机制,能够显著影响数据库的运行效率和维护便利性。通过科学地配置和使用表空间,可以优化存储结构,提高查询速度,简化数据管理流程,从而全面提升系统的整体性能。 ... [详细]
author-avatar
常依sunrise
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有