数据中台(spring boot)_数据库版本控制flyway

背景:

为什么要引入数据库版本控制?作为数据中台的一个bi组件,不断的迭代产品功能开发,对应的版本会新增很多的数据库脚本。不同的项目使用的产品的版本不同,如果不管理起来,没有办法给对应的项目,新增新的功能。

flyway

在微服务启动的时候,就可以检测到数据库版本的变化,从而能够自动去执行变更的数据库脚本,以此来保证除生产外的大部分环境的数据库版本都可以自动一致

首先讲下如何使用:

引入依赖

<!--引入flyway的依赖-->
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>
<plugin>
     <groupId>org.flywaydb</groupId>
     <artifactId>flyway-maven-plugin</artifactId>
     <version>5.0.3</version>
 </plugin>

1. 可以通过实现JdbcMigration接口来实现代码执行sql,不过是通过jdbc来执行sql

public class V1_spss__datas implements JdbcMigration {
    public void migrate(Connection connection) throws Exception {
        PreparedStatement statement = connection.prepareStatement("INSERT INTO ***");
        try {
            statement.execute();
        } finally {
            statement.close();
        }
    }
}

2.在src/main/resources下面新建db/migration文件夹,然后将脚本放入。

Versioned migrations
一般常用的是Versioned类型,用于版本升级,每一个版本都有一个唯一的标识并且只能被应用一次,并且不能再修改已经加载过的Migrations,因为Metadata表会记录其Checksum值。其中的version标识版本号,由一个或多个数字构成,数字之间的分隔符可以采用点或下划线,在运行时下划线其实也是被替换成点了,每一部分的前导零会被自动忽略。
Repeatable migrations
Repeatable是指可重复加载的Migrations,其每一次的更新会影响Checksum值,然后都会被重新加载,并不用于版本升级。对于管理不稳定的数据库对象的更新时非常有用。Repeatable的Migrations总是在Versioned之后按顺序执行,但开发者必须自己维护脚本并且确保可以重复执行,通常会在sql语句中使用CREATE OR REPLACE来保证可重复执行

(1)脚本命名规则V代表version版本,然后跟着数字或者日期做版本号,然后是2个下划线分隔符,后面是说明

(2)Repeatable以R开头,(不需要跟着数字或者日期),然后是2个下划线分隔符,后面是说明

3.application.yml配置

spring:
  flyway:
    enabled: true
    baseline-on-migrate: true
    encoding: UTF-8
    locations: classpath:db/migration

    out-of-order: true /false   #多人开发,设置true可以加载漏掉的版本的sql,生产环境false

我们首次集成Flyway,启动项目后Flyway会在对应的数据库中创建一张名为"flyway_schema_history"的表,这种表就会记录所有脚本版本的执行情况

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值