SpringBoot整合Flyway

SpringBoot整合Flyway前言一般在我们开发项目的时候经常会更新数据库表的字段 如果同事 a 添加了表字段 没有及时给同事 bsql 脚本 可能同事 b 的代码运行就会报错 而且随着时间的推移 sql 脚本越来越多 项目上线的时候整理起来就很费时间所以就有大佬级别的人物创造了 Flyway 这个数据库版本管理工具 源码 GitHub 地址 https github com intomy

前言

  一般在我们开发项目的时候经常会更新数据库表的字段,如果同事 a 添加了表字段,没有及时给同事 b sql 脚本,

  可能同事 b 的代码运行就会报错,而且随着时间的推移,sql 脚本越来越多,项目上线的时候整理起来就很费时间

  所以就有大佬级别的人物创造了 Flyway 这个数据库版本管理工具。

源码

  GitHub地址:https://github.com/intomylife/SpringBoot

环境

  • JDK 1.8.0 +
  • Maven 3.0 +
  • MySQL 5.6.17
  • SpringBoot 2.0.3

开发工具

  • IntelliJ IDEA 

正文

commons 工程 – POM 文件

 
   
   
   
     4.0.0 
    
    
   
     com.zwc 
    
   
     springboot-flyway-commons 
    
   
     0.0.1-SNAPSHOT 
    
    
   
     springboot-flyway-commons 
    
   
     公用工程 
    
    
   
     jar 
    
    
    
     
    
      UTF-8 
     
     
    
      1.8 
     
     
    
      Cairo-SR3 
     
    
    
    
     
     
     
       mysql 
      
     
       mysql-connector-java 
      
     
     
     
     
       org.flywaydb 
      
     
       flyway-core 
      
     
     
     
     
       org.springframework.boot 
      
     
       spring-boot-starter-jdbc 
      
     
    
    
    
    
    
    
     
      
      
      
        io.spring.platform 
       
      
        platform-bom 
       
      
        ${platform-bom.version} 
       
      
        pom 
       
      
        import 
       
      
     
    
    
    
     
      
      
        org.springframework.boot 
       
      
        spring-boot-maven-plugin 
       
      
     
    
   
  • 配置一些共用依赖,其中包括 flyway-core 来整合 Flyway

commons 工程 – 项目结构  

SpringBoot整合Flyway

 

service 工程 

service 工程是一个父工程,里面可能会包含 基础模块,用户模块,订单模块等等… 每个模块中又会分为 core 和 api

service 工程 – base-service-core – application.properties

# 端口 server.port=8082 # 数据源 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/base_db_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false spring.datasource.username=root spring.datasource.password= # 打印 sql 日志 logging.level.com.zwc.base.mapper=debug # flyway 注:可以完全不用配置 sql 脚本的位置,默认为 classpath:db/migration。可手动指定 spring.flyway.locations=classpath:db/zwc 指定数据源,如果没有指定的话,将使用配置的主数据源 spring.flyway.url=jdbc:mysql://127.0.0.1:3306/base_db_flyway?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false Flyway 管理的 Schema 列表,区分大小写。默认连接对应的默认 Schema 如果这里明确指定了库名,那么在 spring.flyway.url 连接中指定的库名将无效 spring.flyway.schemas=base_db_flyway 用户名 spring.flyway.user=root 密码 spring.flyway.password= 开启,默认开启 spring.flyway.enabled=true
  • 此次整合的整个核心部分就在这个配置文件里
  • 如果 Flyway 没有任何配置,默认配置为数据源的配置信息
  • Flyway  默认信息:

a) sql 脚本的位置,默认为 classpath:db/migration。可手动指定

b) 数据源的连接地址,操作的库,用户名以及密码

  •  Flyway 配置信息:

a)  如果配置了 spring.flyway.schemas 明确指定了库名,那么在 spring.flyway.url 连接中指定的库名将无效

b) spring.flyway.schemas > spring.flyway.url > spring.datasource.url

service 工程 – base-service-core – resources -> db.zwc 

  注:此处为 sql 脚本位置( application.properties -> spring.flyway.locations)

  V0.1.0__init_table.sql

-- 创建表 CREATE TABLE `springboot_flyway` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID', `type` varchar(2) DEFAULT NULL COMMENT '生活用品类别:1. 家电类 2. 厨具', `name` varchar(50) DEFAULT NULL COMMENT '生活用品名称', `description` varchar(200) DEFAULT NULL COMMENT '生活用品描述', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='springboot整合flyway测试表';

  V0.1.1__init_data.sql

-- 初始化数据 INSERT INTO springboot_flyway ( type , name , description ) VALUES ('1','电饭煲','用来蒸饭'),('1','电热壶','用来烧水'),('1','空调','用来制冷或制热'), ('2','菜刀','用来切菜'),('2','刨子','用来剥皮'),('2','打蛋器','用来搅拌鸡蛋');

  注意命名规范,参考:https://flywaydb.org/documentation/migrations

  如果没有翻译全文,搜索关键字 Naming;如果翻译了全文,搜索关键字 命名

启用项目,调用接口

  注:根据你配置的数据源信息或 Flyway 信息创建好对应的数据库

  1. 项目启动成功后,到对应的数据库中刷新,即可看到 Flyway 创建的表

  2. 第一次启动的时候,除了主动写的 sql 脚本会被执行以及创建表以外, Flyway 还会自动创建一张历史版本记录的表

service 工程 – 项目结构

SpringBoot整合Flyway

  • 在 service 总工程中创建了一个 base-service 的基础模块
  • 每一个模块中都包含 api 和 core

SpringBoot整合Flyway

  • api:主要包含接口,常量以及实体类的扩展类

SpringBoot整合Flyway

  • core:带有启动类的工程,此模块的核心代码都在里面

把多工程项目使用 IntelliJ IDEA  打开

  1. 把项目从 GitHub 中下载到你的本地
  2. 打开 IntelliJ IDEA 
  3. 点击 File -> Open
  4. 打开你下载到本地的项目目录
  5. springboot-flyway -> springboot-flyway-service(选择打开此工程)
  6. 打开 service 工程后
  7. 再次点击 File -> Project Structrue
  8. 选择 Modules,点击 ‘+’ 符号
  9. 点击 Import  Module
  10. 还是打开你下载到本地的项目目录
  11. springboot-flyway -> springboot-flyway-commons -> pom.xml
  12. 点击 OK
  13. 点击 Next,Finish
  14. 点击 Apply,OK

结语

  到此 SpringBoot 整合 Flyway 就结束了,很简单,主要在配置,多多尝试,一定会成功的!

 

希望能够帮助到你

over

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218658.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:45
下一篇 2026年3月17日 下午11:46


相关推荐

  • SVN—解决冲突

    SVN—解决冲突

    2022年3月13日
    48
  • ubuntu上安装gcc

    ubuntu上安装gcc首先我是直接根据别人博客来的:sudoaptupdatesudoaptinstallbuild-essential主要是说build-essential中包含了GNU编辑器集合

    2022年7月3日
    32
  • 使用Navicat进行ssh通道连接MySQL数据库(亲测可行)

    使用Navicat进行ssh通道连接MySQL数据库(亲测可行)

    2022年2月18日
    68
  • jwplayer免费手机版_视频上显示jwplayer

    jwplayer免费手机版_视频上显示jwplayer————————————2015-5-13————最新更新———————————————由于jwplayer6已经完全无法正常工作,以下介绍的方法也已经失效,请更换视频播放插件,可以参考楼主的文章:http://blog.csdn.net/snow_finland/article/details/45670683————————————————————————————————————————htm…

    2022年10月21日
    4
  • MVT模式

    MVT模式MVT 模式有一种程序设计模式叫 MVC 其核心思想是分工 解耦 让不同的代码块之间降低耦合 增强代码的可扩展性和可移植性 实现向后兼容 MVT 模式 MVC 的全拼为 Model View Controller 最早由 TrygveReensk 在 1978 年提出 是施乐帕罗奥多研究中心 XeroxPARC 在 20 世纪 80 年代为程序语言 Smalltalk 发明的一种软件设计模式 是为了将传统的输入

    2026年3月17日
    2
  • Django(53)二次封装Response

    Django(53)二次封装Response前言有时候我们使用drf的Response,会发现默认返回的格式不太友好,每次我们都需要写入以下的格式returnResponse({"status":0,"

    2022年7月29日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号