在 Spring Boot 中使用 Flyway
一、Flyway 介绍
Flyway 是一个开源的数据库迁移工具,MySQL, SQL Server, Oracle 等二十多种数据库
在 Flyway 中数据库的所有改变均称为迁移(migration),迁移分为两种:基于版本控制的迁移(versioned)和可重复执行的迁移(repeatable)。基于版本控制的又分为两种:常规迁移(regular)和撤销迁移(undo)
基于版本控制的迁移
包含版本(version)、描述(description )和总和校验码(checksum)。版本必须是唯一的(可以是递增的数字或者小版本,如1.2.3等),总和校验码的作用是在 Flyway 会逐个对比之前执行过的脚本的是否被修改,如果被修改则校验码结果不同,会报 checksum mismatch 错误,因此执行过的脚本不应该再修改,如果需要对已有数据表修改,应该新建一个脚本执行;基于版本控制的迁移仅按照版本的顺序执行一次,如果需要撤销,可以提供相同版本的撤销迁移来处理
可重复执行的迁移
包含描述(description )和总和校验码(checksum),但是没有版本(version)。每当校验码发生变化(即文件被修改)时均会执行,而不是仅执行一次;在单次迁移中,可重复执行的迁移按照描述的顺序在其他脚本执行后再执行
迁移的实现方式又分为两种:基于 SQL 脚本(SQL-based)的迁移和基于 Java 代码(Java-based)的迁移
基于 SQL 脚本的迁移
命名规则:[前缀][版本号][分隔符][描述][后缀],如:V2__Add_new_table.sql,R__Add_new_table.sql
- 前缀:常规迁移是 V,撤销迁移是 U,可重复执行的迁移 是 R;前缀是可配置的
- 版本号:使用下划线或者小数点分割
- 分隔符:默认是两个下划线(可配置)
- 描述:使用下划线或者空格分割
- 后缀:默认是 .sql (可配置)
配置参数 validateMigrationNaming 用来配置命名不符合规范的处理方式:true 忽略不符合规范的文件,false 快速失败
基于 Java 代码的迁移
命名规则:[前缀][版本号][分隔符][描述],如:V2__Add_new_table,R__Add_new_table
- 前缀:常规迁移是 V,撤销迁移是 U,可重复执行的迁移 是 R;前缀是可配置的
- 版本号:使用下划线分割(下划线在运行时会自动替换为小数点)
- 分隔符:两个下划线
- 描述:使用下划线分割(下划线在运行时会自动替换为空格)
以上大部分内容为本人翻译自官网,原文:Migrations
二、在 Spring Boot 中使用
本文使用基于 SQL 脚本的迁移
2.1 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
2.2 添加配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/flyway?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root
password: root
flyway:
enabled: true
clean-disabled: true # 生产环境一定要设置为 true
clean-on-validation-error: false
# locations: classpath:db/migration # 脚本位置,默认是 classpath:db/migration
在 db/migration 目录下添加脚本运行程序即会自动执行脚本
在 Spring Boot 中使用 Flyway的更多相关文章
- Spring Boot中使用Flyway来管理数据库版本
flyway是一个开源的数据库迁移工具.类似于数据库的版本控制工具.flyway的数据库修改文件默认放在resource下的db.migration文件夹中,以V{version_number}__{ ...
- Flyway:Spring Boot中使用Flyway来管理数据库版本
Flyway简介 Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate.clean.info.validate.baseline.repair等命令.它支持SQL(PL/ ...
- spring boot(三):Spring Boot中Redis的使用
spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...
- Spring Boot中的事务管理
原文 http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...
- Spring Boot中的注解
文章来源:http://www.tuicool.com/articles/bQnMra 在Spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了 ...
- 在Spring Boot中使用Https
本文介绍如何在Spring Boot中,使用Https提供服务,并将Http请求自动重定向到Https. Https证书 巧妇难为无米之炊,开始的开始,要先取得Https证书.你可以向证书机构申请证书 ...
- Spring Boot中使用Swagger2构建强大的RESTful API文档
由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...
- Dubbo在Spring和Spring Boot中的使用
一.在Spring中使用Dubbo 1.Maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifa ...
- springboot(十一):Spring boot中mongodb的使用
mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...
随机推荐
- 【Luogu】P6232 [eJOI2019]挂架 题解
这道题跟CSP/S 2019 D1T1有点像. 我们先来模拟一下 \(n=4\) 的情况, 不难得出,最后的衣架挂钩顺序: 下标: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...
- CF1320C World of Darkraft: Battle for Azathoth
线段树 又是熟悉的感觉,又是E题写完了,没调完,不过还好上了紫 CF1295E 可以发现可以打败怪兽的关系类似二维偏序 那么首先考虑第一维(武器)以攻击值($a_{i}$)进行排序 把所有的怪兽以防御 ...
- Redis基础—了解Redis是如何做数据持久化的
之前的文章介绍了Redis的简单数据结构的相关使用和底层原理,这篇文章我们就来聊一下Redis应该如何保证高可用. 数据持久化 我们知道虽然单机的Redis虽然性能十分的出色, 单机能够扛住10w的Q ...
- python爬虫01在Chrome浏览器抓包
尽量不要用国产浏览器,很多是有后门的 chrome是首选 百度 按下F12 element标签下对应的HTML代码 点击Network,可以看到很多请求 HTTP请求的方式有好几种,GET,POST, ...
- Spark架构与原理这一篇就够了
一.基本介绍 是什么? 快速,通用,可扩展的分布式计算引擎. 弹性分布式数据集RDD RDD(Resilient Distributed Dataset)弹性分布式数据集,是Spark中最基本的数据( ...
- QQ群web前端分析一——准备部分
Vary:Accept-Encoding的用途 2012-09-06 11:47:08| 分类: rhel_apache|字号 订阅 查看网页的response header一般都有Vary ...
- Failed connect to mirrors.cloud.aliyuncs.com:80
在yum insatall 安装是报错 Failed connect to mirrors.cloud.aliyuncs.com:80; Connection refused 解决方法: cd /et ...
- shell编程之输入输出
1.输入 read命令有以下几种常见形式: read var :等待用户输入,从标准输入中读取一行并赋值给变量var read : 标准输入读取一行,并赋值给内置变量REPLY read -a a ...
- UNP——第五章,TCP客户/服务程序
tcpser void str_echo(int sockfd) { long arg1, arg2; ssize_t n; char line[MAXLINE]; for ( ; ; ) { if ...
- git bash: error: RPC failed; result = 18, HTP code = 200B
git config --global http.postBuffer 2428800 如果还是失败,说明buffer不够大,继续增加buff git config --global http.pos ...