久违了的Spring Boot系列,今天抽空更新一篇。之前写过很多篇关于数据访问的文章了,比如下面这些:
使用JdbcTemplate
使用Spring-data-jpa简化数据访问层(推荐)
多数据源配置(一):JdbcTemplate
多数据源配置(二):Spring-data-jpa
使用NoSQL数据库(一):Redis
使用NoSQL数据库(二):MongoDB
整合MyBatis
MyBatis注解配置详解
使用事务管理
由于这些文章写的比较早,公众号中没有存档,如果没有读过上面内容的读者,有兴趣的可以通过去我的博客(didispace.com)阅读。还想看更多?戳这里:Spring干货汇总(含Spring Boot与Spring Cloud)
在上面的使用JdbcTemplate一文中,主要通过spring提供的JdbcTemplate实现对用户表的增删改查操作。在实现这个例子的时候,我们事先在MySQL中创建了用户表。创建表的过程我们在实际开发系统的时候会经常使用,但是一直有一个问题存在,由于一个系统的程序版本通过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来创建数据库以及结构不一致的检查。
动手试一试
下面我们可以通过对使用JdbcTemplate一文中的例子进行加工完成。读者也可以拿任何一个与数据访问相关的工程来做如下内容的实验:
第一步,在
pom.xml
中增加flyway的依赖:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.0.3</version>
</dependency>
第二步,按Flyway的规范创建版本化的SQL脚本。
在工程的
src/main/resources
目录下创建db
目录在
db
目录下创建版本化的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