flyway是一个开源的数据库迁移工具。类似于数据库的版本控制工具。flyway的数据库修改文件默认放在resource下的db.migration文件夹中,以V{version_number}__{description}的格式命名。各脚本的执行信息会在数据库的schema_version表中做详细记录。每一次编译或运行时,会自动根据schema_version表中的记录,执行还未记录的脚本,保证数据库更新到最新。使用flyway是一种保证处于持续开发或多人并行开发情况下项目的数据库(包括本地数据库)保持一致的有效方法。那么springboot项目中如何集成flyway呢?

  第一步,在pom.xml中增加flyway的依赖:

<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.0.</version>
</dependency>

  第二步,按Flyway的规范创建版本化的SQL脚本。在工程的src/main/resources目录下创建db/migration目录,在db/migration目录下创建版本化的SQL脚本V1__Base_version.sql

DROP TABLE IF EXISTS user ;
CREATE TABLE `user` (
`id` bigint() NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar() NOT NULL COMMENT '姓名',
`age` int() DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

  在这里需要强调的一点是,version_number必须按增序添加。flyway每次执行会检查所有的migration脚本,如果发下有未执行但是version_number早于已执行过的脚本存在,就会抛出异常。

  最后在spring boot的配置文件application.properties中,加入数据库链接基本信息。需要提前创建migration数据库,并给用户root CRUD权限。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/migration?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

  准备完毕后,去控制台执行mvn clean install -DskipTests,项目会自动重新编译,编译时就会检查migration脚步并执行相应脚本。

-- ::,  INFO DatabaseFactory: - Database: jdbc:mysql://127.0.0.1:3306/migration (MySQL 5.7)
-- ::, INFO DbValidate: - Successfully validated migration (execution time :.016s)
-- ::, INFO JdbcTableSchemaHistory: - Creating Schema History table: `migration`.`flyway_schema_history`
-- ::, INFO DbMigrate: - Current version of schema `migration`: << Empty Schema >>
-- ::, INFO DbMigrate: - Migrating schema `migration` to version - demo base

  进入数据库,看是否执行成功。

mysql> use migration;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> show tables;
+-----------------------+
| Tables_in_migration |
+-----------------------+
| flyway_schema_history |
| user |
+-----------------------+
rows in set (0.00 sec)

  以后涉及到数据库变动,直接在db.migration中根据命名规则加入相应的SQL或java脚本,在编译时都会自动执行数据库迁移了,是不是很方便啊。

  

Spring Boot中使用Flyway来管理数据库版本的更多相关文章

  1. Flyway:Spring Boot中使用Flyway来管理数据库版本

    Flyway简介 Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate.clean.info.validate.baseline.repair等命令.它支持SQL(PL/ ...

  2. 使用Flyway来管理数据库版本

    使用Flyway来管理数据库版本 Flyway是什么 Flyway是一款数据库迁移(migration)工具. 它可以帮助我们在不同环境保持数据库的同步,减少手工操作,避免数据导入的顺序错误,同时也减 ...

  3. Spring Boot教程(四十)使用Flyway来管理数据库版本

    在上面的使用JdbcTemplate一文中,主要通过spring提供的JdbcTemplate实现对用户表的增删改查操作.在实现这个例子的时候,我们事先在MySQL中创建了用户表.创建表的过程我们在实 ...

  4. 在 Spring Boot 中使用 Flyway

    一.Flyway 介绍 Flyway 是一个开源的数据库迁移工具,MySQL, SQL Server, Oracle 等二十多种数据库 在 Flyway 中数据库的所有改变均称为迁移(migratio ...

  5. Spring Boot 2.x基础教程:使用Flyway管理数据库版本

    之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的JdbcTemplate.Spring Data JPA以及我们国内最常用的MyBatis.同时, ...

  6. 在Spring Boot中使用内存数据库

    文章目录 H2数据库 HSQLDB Apache Derby SQLite 在Spring Boot中使用内存数据库 所谓内存数据库就是可以在内存中运行的数据库,不需要将数据存储在文件系统中,但是相对 ...

  7. Spring Boot中的事务管理

    原文  http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...

  8. Spring Boot中使用JdbcTemplate访问数据库

    本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例. 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. ...

  9. Spring Boot中使用PostgreSQL数据库

    在如今的关系型数据库中,有两个开源产品是你必须知道的.其中一个是MySQL,相信关注我的小伙伴们一定都不陌生,因为之前的Spring Boot关于关系型数据库的所有例子都是对MySQL来介绍的.而今天 ...

随机推荐

  1. gcc 库路径里同时有相同文件名的动态库和静态库

    找不到库的处理方案 有两种方法: 一.可以把当前路径加入 /etc/ld.so.conf中然后运行ldconfig,或者以当前路径为参数运行ldconfig(要有root权限才行). 二.把当前路径加 ...

  2. 又一道区间DP的题 -- P3146 [USACO16OPEN]248

    https://www.luogu.org/problemnew/show/P3146 一道区间dp的题,以区间长度为阶段; 但由于要处理相邻的问题,就变得有点麻烦; 最开始想了一个我知道有漏洞的方程 ...

  3. sticky footer 布局

    <!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...

  4. Spring mvc项目,使用jetty插件和tomcat路径相差一个项目名

    pom.xml: jetty 插件配置: <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId& ...

  5. shell for if

    #!/bin/bash ..} do ];then j="${i}" else j="${i}" fi echo $j >> venn.log ec ...

  6. 2018.12.19 codeforces 1092F. Tree with Maximum Cost(换根dp)

    传送门 sbsbsb树形dpdpdp题. 题意简述:给出一棵边权为1的树,允许选任意一个点vvv为根,求∑i=1ndist(i,v)∗ai\sum_{i=1}^ndist(i,v)*a_i∑i=1n​ ...

  7. 2018.11.02 洛谷P2661 信息传递(拓扑排序+搜索)

    传送门 按照题意模拟就行了. 先拓扑排序去掉不在环上面的点. 剩下的都是简单环了. 于是都dfsdfsdfs一遍求出最短的环就行. 代码: #include<bits/stdc++.h> ...

  8. 设置vue启动项目后默认显示的页面

    通过配置路由,可以设置vue项目启动后默认显示的页面.路由的path设置为path:"/",启动项目后就会显示默认的组件页面. import Vue from 'vue' impo ...

  9. lepus部署

    lepus部署 lepus安装 cd /usr/local/src/lepus_v3.7/ cd python/ sh install.sh mysql配置 mysql -uroot -p'zaBBi ...

  10. s5-2 Cpu调度算法

    调度程序采用什么算法选择一个进程(作业)? 如何评价调度算法的性能? 调度准则 CPU利用率 – 使CPU尽可能的忙碌 吞吐量 – 单位时间内运行完的进程数 周转时间 – 进程从提交到运行结束的全部时 ...