flyway常用配置_Spring Boot 2.x基础教程:使用Flyway管理数据库版本
之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的JdbcTemplate、Spring Data JPA以及我们国内最常用的MyBatis。同时,对于一些复杂场景比如:更换Druid数据源,或是多数据源的情况也都做了介绍。
不论我们使用哪一个具体实现框架,都离不开对数据库表结构的管理。而这一类管理一直都存在一个问题:由于数据库表元数据存储于数据库中,而我们的访问逻辑都存在于Git或其他代码仓库中。Git已经帮助我们完成了代码的多版本管理,那么数据库中的表该如何做好版本控制呢?
今天我们就来介绍在Spring Boot中使用Flyway来管理数据库版本的方法。
Flyway简介
Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL(PL/SQL、T-SQL)方式和Java方式,支持命令行客户端等,还提供一系列的插件支持(Maven、Gradle、SBT、ANT等)。
官方网站:https://flywaydb.org/
本文对于Flyway的自身功能不做过多的介绍,读者可以通过阅读官方文档或利用搜索引擎获得更多资料。下面我们具体说说在Spring Boot应用中的应用,如何使用Flyway来创建数据库以及结构不一致的检查。
动手试试
下面我们先预设一个开发目标:
假设我们需要开发一个用户管理系统,那么我们势必要设计一张用户表,并实现对用户表的增删改查操作。
在任务1的功能完成之后,我们又有一个新需求,需要对用户表增加了一个字段,看看如何实现对数据库表结构的更改。
目标 1 的实现
第一步:创建一个基础的Spring Boot项目,并在pom.中加入Flyway、MySQL连接和数据访问相关的必要依赖(这里选用spring-boot-starter-jdbc作为例子)
org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-jdbcmysqlmysql-connector-javaorg.flywaydbflyway-coreorg.projectlomboklombokprovidedorg.springframework.bootspring-boot-starter-testtest
第二步:按Flyway的规范创建版本化的SQL脚本。
在工程的src/main/resources目录下创建db目录,在db目录下再创建migration目录
在migration目录下创建版本化的SQL脚本V1__Base_version.sql
DROP TABLE IF EXISTS user ;CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(20) NOT NULL COMMENT '姓名', `age` int(5) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
注意:如果你不想将SQL脚本放到其他目录,可以用spring.flyway.locations参数来配置。这里不同于1.x版本的配置项flyway.locations
第三步:根据User表的结构,编写对应的实体定义
@Data@NoArgsConstructorpublic class User { private Long id; private String name; private Integer age;}
第四步:编写用户操作接口和实现
public interface UserService { /** * 新增一个用户 * * @param name * @param age */ int create(String name, Integer age); /** * 根据name查询用户 * * @param name * @return */ List getByName(String name); /** * 根据name删除用户 * * @param name */ int deleteByName(String name); /** * 获取用户总量 */ int getAllUsers(); /** * 删除所有用户 */ int deleteAllUsers();}@Servicepublic class UserServiceImpl implements UserService { private JdbcTemplate jdbcTemplate; UserServiceImpl(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Override public int create(String name, Integer age) { return jdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age); } @Override public List getByName(String name) { List users = jdbcTemplate.query("select * from USER where NAME = ?", (resultSet, i) -> { User user = new User(); user.setId(resultSet.getLong("ID")); user.setName(resultSet.getString("NAME")); user.setAge(resultSet.getInt("AGE")); return user; }, name); return users; } @Override public int deleteByName(String name) { return jdbcTemplate.update("delete from USER where NAME = ?", name); } @Override public int getAllUsers() { return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class); } @Override .........
flyway常用配置_Spring Boot 2.x基础教程:使用Flyway管理数据库版本相关推荐
- flyway常用配置_Spring Boot 2 实战:使用 Flyway 管理你数据库的版本变更
1. 前言 随着项目的不断迭代,数据库表结构.数据都在发生着变化.甚至有的业务在多环境版本并行运行.数据为王的时代,管理好数据库的版本也成为了迫切的需要.如何能做到像 Git 之类的版本控制工具来管理 ...
- node在regedit配置哪个位置_Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...
- 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...
- jeesite如何配置swagger_Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解...
之前通过Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档一文,我们学习了如何使用Swagger为Spring Boot项目自动生成API文档,有不少用户留言问了关于文档 ...
- spring cloud入门_Spring Boot 2.x基础教程:快速入门
简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...
- Spring Boot 2.x基础教程:事务管理入门
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 什么是事务? 我们在开发企业应用时,通常业务人员的一个操 ...
- Spring Boot 2.x基础教程:使用JTA实现分布式事务
在一个Spring Boot项目中,连接多个数据源还是比较常见的.之前也介绍了如何在几种常用框架的场景下配置多数据源,具体可见: Spring Boot 2.x基础教程:JdbcTemplate的多数 ...
- Spring Boot 2.x基础教程:使用JTA实现多数据源的事务管理
在一个Spring Boot项目中,连接多个数据源还是比较常见的.之前也介绍了如何在几种常用框架的场景下配置多数据源,具体可见: Spring Boot 2.x基础教程:JdbcTemplate的多数 ...
- Spring Boot 2.x基础教程:使用集中式缓存Redis
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 之前我们介绍了两种进程内缓存的用法,包括Spring B ...
最新文章
- ubuntu 14.04 安装java_Ubuntu 14.04中安装Java
- iOS:quartz2D绘图(给图形绘制阴影)
- beego mysql session_关于go中beego/session的小总结
- dump mysql database_【MySQL Database】数据迁移工具:mysqldump
- Python Lambda函数的几种使用方法
- manually create IBASE 03 in CRM
- 欧拉定理(洛谷-P5091)(十进制快速幂实现)
- Error: Cannot find module ‘webpack-cli/bin/config-yargs‘ 解决办法
- 锂离子电池容量计量之库仑计法
- 推荐系统笔记(二):常用数据集Movielens学习
- 常用的台式计算机,台式电脑常见简单故障排除
- 【Unity】Fly Bird(游戏实战)(1)
- unity将指定UI图片置为灰色
- ffmpeg生成裸眼3D、伪3D视频
- Java中统计耗时的方法
- ISCC 2018 PWN WriteUp
- PHP调用jsignature生成图片,App端jSignature签字版生成透明背景png图片
- 计算机教室灭火器配置标准,计算机教室与多媒体教室安装场地基本要求.doc
- checked和unchecked的区别
- NetSuite SuiteAnalytics 高级搜索 全课程中文学习视频