flyway使用手册

一、简介

1、什么是flyway?

Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。 Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置。 Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command Line和Java API,还支持Build构建工具和Spring Boot等。 同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。

2、为什么要使用flyway?

在真实的项目开发中,我们每个人都会有一个应用软件和与其相联系的数据库。对于个人开发来说,这样就够了。但是,项目开发一般都不止一个人,因此一定会出现我在我的本地有一套软件和相应的数据库系统,我的另一个同事会在他的本地有一套他自己的软件和相应的数据库系统。我们需要面临的第一个问题就是我们两个人如何集成我们的数据库系统,之后还要处理如何将数据库系统迁移到测试环境和生产环境当中去。

二、使用

1、引入依赖
// 引入依赖
api("org.flywaydb:flyway-core:5.2.1")
// 解决包冲突问题
configurations {
    all {
        resolutionStrategy.cacheChangingModulesFor 0, 'seconds' // 设置快照版本缓存时间
        resolutionStrategy.cacheDynamicVersionsFor 0, 'minutes' // 设置动态版本缓存时间
        resolutionStrategy {
            eachDependency { DependencyResolveDetails details ->
                if (details.requested.group == 'org.flywaydb') {
                    details.useVersion "5.2.1"   // 设置flyway的版本始终为5.2.1
                }
            }
        }
    }
}
2、进行flyway相关配置
@Configuration
@Slf4j
public class ZeusDbConfiguration {
    private static final String MAGIC_NAME = "UT/master"; // 定位zeus.json中的UT/master。

    static {
        // 获取配置文件中的数据源(zeus.json)对象
        DataSourceConfig dataSourceConfig = DataSourceConfigManager.INSTANCE.getDataSourceConfig(MAGIC_NAME);
        // 进行flyway的相关配置
        Flyway flyway = Flyway.configure()
                .dataSource(dataSourceConfig.getJdbcUrl(),dataSourceConfig.getUsername(),dataSourceConfig.getPassword())
                .locations("db/migration") // sql存放的路径
                .baselineVersion("1_0")
                .baselineOnMigrate(true)
                .outOfOrder(false)
                .encoding("UTF-8")
                .load();
        try {
            flyway.migrate(); // 执行
        } catch (FlywayException e) {
            log.error("Flyway配置第一次加载出错", e);
            try {
                flyway.repair();
                log.info("Flyway配置修复成功");
                flyway.migrate();
                log.info("Flyway配置重新加载成功");
            } catch (Exception e1) {
                log.error("Flyway配置第二次加载出错", e1);
                throw e1;
            }
        }
    }
}
3、创建目录以及sql文件

在类路径下创建多级目录,db/migration(这个可以自行配置,但是不建议更改)
将sql语句放入此目录下,这样项目在启动时,就会扫描到这些sql文件并按照 版本号 顺序 执行。 ==> 双下划线前为版本号,双下划线后为描述信息

请添加图片描述

项目启动时,自动按照版本号执行sql文件,并创建一个flyway_schema_history表,记录执行的sql信息

请添加图片描述

4、补充说明
字段名描述
installed_rank执行排名 ,值越低优先级越高,即版本越低越先执行
version执行版本
description描述信息
type文件类型
script文件名
checksum检验项,判断是否存在修改。存在修改会报错
installed_by执行的数据库用户
installed_on执行时间
execution_time执行文件所耗时间
success是否执行成功(0-失败,1-成功)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值