`

194. Spring Boot 数据库迁移:Flyway

阅读更多

 

【视频&交流平台】

à 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 和JPAhttp://t.cn/R1pSojf

 

 

历史相关章节:

193. Spring Boot 数据库迁移:概述

 

说明:

(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或者扫描以下二维码即可关注:


  • 大小: 167.3 KB
分享到:
评论

相关推荐

    Spring-Boot-Reference-Guide, Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南》.zip

    2. 数据库迁移:支持Flyway和Liquibase数据库迁移工具。 3. Spring Data JPA:简化了与JPA供应商的交互,提供了CRUD操作的便捷接口。 六、Spring Boot安全 1. Spring Security:为Web应用提供全面的安全管理,包括...

    flyway-springboot.zip_springboot集成flyway数据库版本管理工具

    集成完成后,启动Spring Boot应用,Flyway会自动运行所有未执行的迁移脚本,更新数据库到最新版本。每次数据库结构的改变,只需要创建新的SQL脚本并放置在指定的目录下,Flyway会在下次启动时识别并执行。 除了手动...

    SpringBoot快速入门3434

    - `flyway.url`:待迁移的数据库的 JDBC URL。 - `flyway.user`:待迁移数据库的登录用户。 - `flyway.validate-on-migrate`:在运行迁移时是否要自动验证。 3. **Liquibase 数据库迁移工具配置** - **属性名称...

    spring boot相关书籍

    3. **数据访问**:涉及JPA和Hibernate的集成,数据库迁移工具Flyway和Liquibase,以及对NoSQL数据库如MongoDB的支持。 4. **安全**:讲解Spring Security的使用,包括身份验证、授权、CSRF保护等安全机制。 5. **...

    Spring Boot 集成 Flyway,数据库也能做版本控制,太牛逼了!(csdn)————程序.pdf

    如果是在Spring Boot 2.5及以上版本中,如果使用了spring.flyway.url定义数据库连接,还需要加上username/password进行认证。如果是在Flyway首次运行时,需要在项目资源目录下创建一个名为flyway的目录,并在此目录...

    详解Spring Boot中使用Flyway来管理数据库版本

    Spring Boot 中使用 Flyway 管理数据库版本 在实际开发中,我们经常会遇到数据库版本管理的问题。由于系统的程序版本可以通过 Git 得到的很好的版本控制,而数据库结构并没有。尽管我们可以通过 Git 进行语句的版本...

    springboot:Spring Boot和Flyway的探索项目

    Spring Boot和Flyway是两个在Java开发中广泛使用的开源工具,它们分别专注于简化Spring应用程序的配置和管理数据库的迁移。让我们深入探讨这两个技术的核心概念、使用场景以及如何将它们结合在一起。 Spring Boot是...

    JeeSite 默认MySql,让我们来看看如何更换为Oracle数据库

    JeeSite 是一个基于Spring Boot、Spring MVC、MyBatis、Activiti等技术构建的企业级快速开发平台,其默认数据库为MySQL。然而,根据业务需求,我们可能需要将JeeSite的数据库环境从MySQL切换到Oracle。这一过程涉及...

    Spring Boot核心技术-笔记-pdf版.pdf

    它简化了数据源配置,并提供了数据迁移工具Flyway和Liquibase。 10. **安全控制** Spring Security是Spring Boot默认的安全管理框架,提供了认证、授权等功能。通过简单的配置即可实现复杂的安全控制。 11. **...

    基于Flyway实现简化Spring Boot项目部署

    - `spring.flyway.baseline-on-migrate`: 是否在迁移时设置基线。 - `spring.flyway.locations`: 定义数据库脚本的位置。 5. **总结** 使用Flyway简化Spring Boot项目部署,能有效提升开发效率,保证数据库的...

    migrationExemple:简单的例子,说明如何使用Java和Spring引导进行迁移

    在迁移过程中,Spring Boot可以通过依赖注入和starter pom帮助我们快速集成所需的库,如Flyway或Liquibase用于数据库迁移。 2. **数据库迁移工具**: 通常,有两种流行的数据库迁移工具与Spring Boot一起使用: -...

    springboot参考指南

    启动时执行Flyway数据库迁移 ii. 68.5.2. 启动时执行Liquibase数据库迁移 viii. 69. 批处理应用 i. 69.1. 在启动时执行Spring Batch作业 ix. 70. 执行器(Actuator) i. 70.1. 改变HTTP端口或执行器端点的地址 ii. ...

    spring-boot-actuator:用于执行器的Spring Web开发培训模块

    7. **flyway** 和 **liquibase**:针对数据库迁移工具的状态监控。 8. **beans**:列出所有Spring beans及其详细信息。 9. **auditevents**:记录和展示审计事件,如用户登录、资源更改等。 Spring Boot Actuator ...

    boot-app:此存储库是Spring Boot和Angular2教程的示例应用程序

    包含了所有必要的文件和配置,包括但不限于:pom.xml(Maven配置文件)、application.properties(Spring Boot配置文件)、Kotlin源代码、Angular源代码、数据库迁移脚本、Swagger配置等。通过解压并研究这些文件,...

    boot_blog:用 Spring Boot 写的博客

    - **数据库迁移工具**:使用Flyway或Liquibase进行数据库版本管理 - **安全控制**:Spring Security提供认证和授权,可以配置JWT令牌或OAuth2 - **RESTful API设计**:创建符合REST原则的HTTP接口,便于API调用 ...

    spring-boot-actuator-web-api.pdf

    - 如果使用了Flyway进行数据库迁移,可以获取当前数据库的迁移信息。 - 响应结构显示了迁移历史和状态。 9. Health (健康信息) - 提供了关于应用程序健康状况的信息。 - 可以查看整个应用的健康状况,也可以...

    Spring-boot-backend--EmployeeManager:Spring Boot后端员工经理

    3. 数据迁移:可使用Flyway或Liquibase进行数据库版本控制和迁移。 五、安全控制 1. Spring Security:用于实现用户认证和授权,可以配置登录、权限控制等功能。 2. JWT:可采用JSON Web Token实现无状态认证,...

    [应用开发及迁移][客户端编程开发框架]Flyway指南.pdf

    如果是在Spring Boot项目中使用Flyway,则可以通过配置文件启用Flyway,并自动在项目启动时执行迁移操作。相关配置如下: ```yaml spring: flyway: enabled: true ``` 通过这种方式,可以轻松地实现数据库的版本...

    spring-boot-admin:用于管理Spring Boot应用程序的Admin UI

    和// refresh-endpoint 轻松的日志级别管理与JMX-beans交互查看线程转储查看http-traces 查看审核事件查看http端点查看预定的任务查看和删除活动会话(使用spring-session) 查看Flyway / Liquibase数据库迁移下载...

    spring-boot-boilerplate:一个功能完备的生产就绪项目,可通过用户身份验证和示例测试来引导您的spring boot应用程序

    总结来说,这个项目提供了一个全面的Spring Boot应用起点,包括了用户认证(JWT)、数据库交互、测试支持(JUnit)、API文档(Swagger UI)、数据库版本控制(Flyway)以及前端界面(Bootstrap)。这些组件共同构建...

Global site tag (gtag.js) - Google Analytics