使用flyway对数据库进行版本管理

svbadmin学习日志

本学习日志是使用Springboot和Vue来搭建的后台管理系统:
演示地址:http://118.31.68.110:8081/index.html
账号:root
密码:123
所有代码可以在gitbub上找到,切换到相应分支即可。【代码传送门】

正篇

第一节 spring boot 模块化构建项目
第二节 整合mybatisplus完成用户增删改查
第三节 整合springsecurity实现基于RBAC的用户登录
第四节 springsecurity结合jwt实现前后端分离开发
第五节 使用ResponseBodyAdvice格式化接口输出
第六节 springboot结合redis实现缓存策略
第七节 springboot结合rabbitmq实现队列消息
第八节 springboot结合rabbitmq实现异步邮件发送
第九节 利用springboot的aop实现行为日志管理
第十节 利用Quartz实现数据库定时备份
第十一节 springboot配置log输出到本地文件
第十二节 使用flyway对数据库进行版本管理
第十三节 springboot配合VbenAdmin实现前端登录
第十四节 springboot配合VbenAdmin实现用户CURD
第十五节 基于RBAC的权限管理VbenAdmin前端实现
第十六节 springboot 打包vue代码实现前后端统一部署

番外

2.1 数据库设计原则
3.1 配置apifox自动获取登录的token
13.1 springboot 全局捕捉filter中的异常
14.1 springsecurity整合mybatisplus出现isEnable的问题和解决方案


前言

对数据库的版本控制,个人认为还是php阵营做的好一点,这个migration的设计在yii和laravel框架早就使用了。在对比了下使用的便利性上,光没有生成migration文件的命令这一条,感觉flyway就不是很方便。于是乎需要开发的时候规定migration文件的命名规范。无形增加管理成本。
这里我们就约定 V20220816.221300__init.sql为命名规范,即V年月日.时分秒__描述.sql


一、flyway配置

1.加入依赖

admin-web中加入依赖

<!-- flyway-->
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-mysql</artifactId>
</dependency>

2.配置

application.properties中加入flyway的配置

# flyway
spring.flyway.enabled=true
spring.flyway.baseline-on-migrate=true
spring.flyway.clean-disabled=true
spring.flyway.clean-on-validation-error=false
spring.flyway.baseline-version=1.0.0
spring.flyway.url=${spring.datasource.url}
spring.flyway.user=${spring.datasource.username}
spring.flyway.password=${spring.datasource.password}
spring.flyway.driver-class-name=${spring.datasource.driver-class-name}

二、创建sql,测试

1.V20220816.221300__init.sql

--
-- 表的结构 `user`
--

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user`
(
    `id`            bigint UNSIGNED NOT NULL AUTO_INCREMENT,
    `name`          varchar(32)          DEFAULT NULL COMMENT '姓名',
    `phone`         char(11)             DEFAULT NULL COMMENT '手机号码',
    `email`         varchar(64)          DEFAULT NULL COMMENT '邮箱',
    `enabled`       tinyint(1) DEFAULT '1' COMMENT '激活状态:1为启用,0位禁用',
    `locked`        tinyint(1) DEFAULT '0' COMMENT '是否被锁:1为已锁,0位未锁',
    `username`      varchar(255)         DEFAULT NULL COMMENT '用户名',
    `password`      varchar(255)         DEFAULT NULL COMMENT '密码',
    `avatar`        varchar(255)         DEFAULT NULL COMMENT '头像',
    `last_login_at` datetime NULL DEFAULT NULL COMMENT '最后登录时间',
    `last_login_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后登录ip',
    `mp_open_id`    varchar(64) NOT NULL DEFAULT '' COMMENT '微信open_id',
    `union_id`      varchar(64) NOT NULL DEFAULT '' COMMENT '微信union_id',
    `created_at`    datetime NULL DEFAULT NULL,
    `updated_at`    datetime NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- 转存表中的数据 `user`
--
insert into `user` (`id`, `name`, `phone`, `email`, `enabled`, `locked`, `username`, `password`, `avatar`, `last_login_at`,
                    `last_login_ip`, `mp_open_id`, `union_id`, `created_at`, `updated_at`)
values (1, '超级管理员', '13912341234', 'likeboat@163.com', 1, 0, 'root',
        '$2a$10$ySG2lkvjFHY5O0./CPIE1OI8VJsuKYEzOYzqIa7AJR6sEgSzUFOAm',
        'https://img-home.csdnimg.cn/images/20201124032511.png', NULL, '', '', '', now(), now()),
       (2, '管理员', '13812341234', 'likeboat@126.com', 1, 0, 'admin',
        '$2a$10$ySG2lkvjFHY5O0./CPIE1OI8VJsuKYEzOYzqIa7AJR6sEgSzUFOAm',
        'https://img-home.csdnimg.cn/images/20201124032511.png', NULL, '', '', '', now(), now()),
       (3, '普通用户', '13712341234', 'likeboat@sina.com', 1, 0, 'user',
        '$2a$10$ySG2lkvjFHY5O0./CPIE1OI8VJsuKYEzOYzqIa7AJR6sEgSzUFOAm',
        'https://img-home.csdnimg.cn/images/20201124032511.png', NULL, '', '', '', now(), now());


2. 直接启动,看看效果

使用flyway对数据库进行版本管理_第1张图片


总结

  1. flyway 版本很多还是直接用springboot自带比较好
  2. 网上的一些配置不一定适合当前项目,可以多做点尝试,解决问题。
  3. 总之这次配置还是碰到不少问题,还是那句话,没有php来的傻瓜好用

问题

  1. Failed to instantiate [org.flywaydb.core.Flyway]: Factory method ‘flyway’ threw exception; nested exception is java.lang.BootstrapMethodError: java.lang.NoSuchMethodError: org.flywaydb.core.api.configuration.FluentConfiguration.ignoreMissingMigrations(Z)Lorg/flywaydb/core/api/configuration/FluentConfiguration;
    暂时还是不要升级到9.x,springboot 2.7.3 才支持

  2. No migrations found. Are your locations set up correctly?
    db.migration 其实应该是 db/migration, 当心应该是两个层级文件夹,而不是一个叫db.migration的文件夹

  3. Unsupported Database: MySQL 8.0

把flyway-core改成flyway-mysql可以解决

        <!-- flyway-->
        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-mysql</artifactId>
        </dependency>

代码地址

代码


参考文档:
flyway数据库版本控制
【SQL管理】-Flyway数据库版本管理利器从入门到入味

你可能感兴趣的:(svbadmin,数据库,java,java-rabbitmq)