【视频&交流平台】
à SpringBoot视频:http://t.cn/R3QepWG
à SpringCloud视频:http://t.cn/R3QeRZc
à Spring Boot源码:https://gitee.com/happyangellxq520/spring-boot
à Spring Boot交流平台:http://412887952-qq-com.iteye.com/blog/2321532
à Spring Boot Shiro视频:http://t.cn/R3QDMbh
à Spring Boot 2.0 之Spring Data 和JPA:http://t.cn/R1pSojf
历史相关章节:
说明:
(1)Spring Boot 版本:1.5.12.RELEASE
(2)Flyway版本:3.2.1
前言:
在上一篇文章中,我们提到了Spring Boot为两款流行的数据库迁移工具提供了自动配置支持,这节我们就先介绍下Flyway。
一、什么是Flyway?
官网地址:http://flywaydb.org
Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command Line和Java API,还支持Build构建工具和Spring Boot等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。
二、为什么使用Flyway?
在开发产品新特性过程中,难免会遇到需要更新数据库Schema的情况,比如:添加新表,添加新字段和约束等。那么如何快速地在其他开发者机器上同步?并且如何在测试服务器上快速同步?以及如何保证集成测试能够顺利执行并通过呢?
以上问题可以通过Flyway工具来解决,Flyway可以实现自动化的数据库版本管理,并且能够记录数据库版本更新记录
三、Flyway在Sping Boot的使用
3.1 新建一个项目
新建项目,取名为:springboot-flyway
3.2 添加依赖
在pom.xml文件中添加依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kfit</groupId>
<artifactId>springboot-flyway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-flyway</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
说明:
(1)Flyway的依赖是:flyway-core;
(2)为什么需要配置JPA和MySQL驱动:默认情况下,Flyway会自动注入注解了@Primary的DataSource,那么这个数据源是哪来的呢?那这里就是使用了JPA了(当然你可以使用jdbcTemplate或者是MyBatis);由于我们使用mysql数据库进行测试,那么就需要引入MySQL驱动了。
3.3 添加配置
在application.properties文件添加配置:
### datasource
spring.datasource.platform=mysql
spring.datasource.url = jdbc:mysql://localhost:3306/flyway_test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
### jpa
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = none
这个没什么好说的,就是数据源和jpa的基本配置。
3.4 Flyway存放路径说明
默认情况下是classth:db/migration,但你能够使用flyway.locations进行修改。这里我们使用默认就好了,为了接下里的测试,在resources创建目录db/migration:
src/main/resources
- db
-- migration
3.5 Flyway sql脚本命令规则
对于Flyway的脚本V<VERSION>__<NAME>.sql,这里的VERSION使用下划线进行命名的方式,比如:直接命名为1或者是1_1(这个就是代表1.1版本);NAME:对当前脚本的描述,这里举例说明下:
V3__insertBook.sql:这就代表version=3,描述为insertBook;V2_1__insertAuthor.sql:这就代表version=2.1,描述为insertAuthor;
温馨提醒:其一这里的V字母要大写;其二上面中间是双杠。
3.6 测试一
db/migration下新建文件V1_1__init.sql,脚本如下:
CREATE TABLE book (
id int UNSIGNED NOT NULL AUTO_INCREMENT,
name varchar(255) NULL,
createTime datetime NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
运行应用,查看数据库中是否多了两个表:
其一是book表,这是我们脚本中创建的,其二是Flyway版本管理的表schema_version:
(这里是截取了,执行了之后脚本的图,第一次执行的话,应该只会一条数据。)
3.7 测试二
db/migration下新建文件V1_2__insertBook.sql,脚本如下:
INSERT INTO book(name, createTime) VALUES ('从零开始学Spring Boot', '2018-04-21 16:53:48');
运行应用,查看book表中是否多了条数据,schema_version是否多了条版本记录。
到此为止,Flyway的使用就一切顺利了,到这里就告一段落了。
微信公众号「SpringBoot」最近更新:
206. Spring Boot 2.0 Swagger2:使用
205. Spring Boot 2.0 Swagger2:初识Swagger
当要离开的时候,我却动情了
205. jetcache:你需要知道的小技巧
204. jetcache:在Spring Boot中怎么玩?
遇见阿里,遇见自己
203. 阿里jetcache
202. 阿里Pandora Boot
微信公众号赞赏功能升级了,真的假的?
《喜剧之王》「我养你啊」之人生选择
201. Spring Boot JNDI:Spring Boot中怎么玩JNDI
510阿里日,马老师献上最走心、最科技范儿证婚词~
200. Spring Boot JNDI:在Tomcat中怎么玩JNDI?
199. Spring Boot JNDI:这是虾米?
Spring Boot 数据库迁移系列
Spring Boot葵花宝典:初露锋芒:MyBatis insert异常 Parameter 'name' not found
198. Spring Boot Flyway工作原理
21天习惯养成法则
197. Spring Boot 2.0数据库迁移:Liquibase
196. Spring Boot 数据库迁移:Liquibase
195. Spring Boot 2.0数据库迁移:Flyway
194. Spring Boot 数据库迁移:Flyway
193. Spring Boot 数据库迁移:概述
搜索「springboot」或者扫描以下二维码即可关注:
相关推荐
启动时执行Flyway数据库迁移 ii. 68.5.2. 启动时执行Liquibase数据库迁移 viii. 69. 批处理应用 i. 69.1. 在启动时执行Spring Batch作业 ix. 70. 执行器(Actuator) i. 70.1. 改变HTTP端口或执行器端点的地址 ii. ...
和// refresh-endpoint 轻松的日志级别管理与JMX-beans交互查看线程转储查看http-traces 查看审核事件查看http端点查看预定的任务查看和删除活动会话(使用spring-session) 查看Flyway / Liquibase数据库迁移下载...
mybatis-spring-boot-jpetstore 该示例是一个基于MyBatis,Spring Boot(Spring MVC,Spring Security)和Thymeleaf的Web应用程序。 这是MyBatis JPetStore示例应用程序( )的另一种实现。... Flyway 6.4(数据库迁移
飞路数据库迁移 该项目用作Flyway跑步者。 预期迁移脚本的位置作为输入 建立这个项目,并在有盖罐子的帮助下进行迁移。 示例Java命令如下。 java -Ddb.connection.url =“ jdbc:mariadb:// localhost:3306 /” -...
使用Flyway进行数据库迁移 使用JUnit和Mockito进行单元和集成测试 使用EhCache缓存 与TravisCI的持续集成 如何运行应用程序 确保已安装Maven,并将其添加到操作系统的PATH和Git中。 git clone: :...
产品特点支持Spring和Spring Boot框架支持的版本是Spring 4.3.0+和Spring Boot 1.4.0+ 与Spring TestContext框架自动集成完全支持上下文缓存与Flyway数据库迁移工具无缝集成只需将@FlywayTest批注放置在测试类或方法...
博客Spring Boot示例应用程序 一个简单的Spring Boot REST API 技术: Java ...使用Flyway进行数据库迁移 与Testcontainers和DataJPATest的集成测试 待办事项:添加更多示例: 条件API查询 查询DSL
Flyway(用于数据库迁移) Sprint Boot Spring安全 Spring数据 设定值: 使用命令git clone https://github.com/luiznazari/senior-pdv.git克隆项目; 在Eclipse或另一个IDE中作为“行家项目”导入; 该项目是...
・ Spring Data Jpa→CRUD技术(SpecificationAPI,CriteriaAPI等)开发环境-前端:“ vue.js”“ thymeleaf”“ BootStrap”-生成工具:“ Gradle”・后端:“ Spring Boot”-迁移:“飞行路线”-数据库:“ ...
使用Flyway进行数据库迁移 Spring Security电子邮件/密码登录+注册 用于视图和布局方言的Thymeleaf模板 使用Thymeleaf模板发送电子邮件并创建它们 使用MockMvcTest,RepositoryTest,EmailTest和用于服务层的常规...
RESTful API,可让您管理仓库该项目使用Java和以下工具构建: 作为服务器端框架作为构建自动化工具为ORM / JPA实施作为数据库实现作为Hibernate的顶层作为数据库迁移工具作为动态查询的替代框架应用结构模型域模型是...
如果您想将此库与Spring Boot一起使用,还可以向下滚动至有关如何使用Spring Boot Starter的描述。 Datastax驱动程序版本4 如果您已经将项目迁移到Datastax Driver的版本4,则可以使用分支master_v4的代码。 您...
基于spring boot和mybatis的crud项目 设置 创建Docker网络 docker network create person-network 创建Docker卷 docker volume create --name=person-volume 建立资料库 docker-compose up db 迁移 mvn flyway:...
使用Flyway进行数据库迁移 使用JUnit和Mockito进行单元和集成测试 使用EhCache缓存 与TravisCI的持续集成 如何运行应用程序 确保已安装Maven,并将其添加到操作系统的PATH和Git中。 git clone ...
使用Flyway进行数据库迁移 使用JUnit和Mockito进行单元和集成测试 使用EhCache缓存 与TravisCI的持续集成 如何运行应用程序 确保已安装Maven,并将其添加到操作系统的PATH和Git中。 git clone ...
项目 对Spring Boot 2 ,JDK8 +,JUnit5,TestNG,SQL(HSQLDB,MariaDB,PostgreSQL),NoSQL(Redis... Spring Boot 2 (Spring框架5) 您可以比较和分支来研究从Spring Boot 1(Spring Framework 4)到Spring Boot 2
添加了用于数据库迁移和版本控制的Flyway。 使用HSQL作为嵌入式数据库。 有三个应用程序配置文件( prod , dev , test ),默认配置文件是dev 。 要更改配置文件,请使用命令行参数: java -jar target/...
Flyway作为数据库迁移工具。 设计考虑 分开的管理和注册URL路径,以促进基于角色和特权的控制。 管理员的路径为/ admin,注册的路径为/ registration。 最初的实现使用README来记录API端点,这很麻烦。 将Swagger...
当启动App时,Spring Boot会自动开始迁移,但是有时我们需要修复一些问题,您可以使用以下命令: gradle flywayMigrate迁移数据库 gradle flywayClean删除配置模式中的所有对象 gradle flywayInfo打印有关所有迁移...
发电机弹簧靴 Yeoman生成器,用于通过...Spring Data JPA集成,带有选择数据库的选项,例如MySQL,Postgresql,MariaDB等 Flyway或Liquibase数据迁移支持 SpringBoot执行器配置 TestContainers集成 JUnit 5 适用于应