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

背景:

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

flyway

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

首先讲下如何使用:

引入依赖



    org.flywaydb
    flyway-core


     org.flywaydb
     flyway-maven-plugin
     5.0.3
 

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"的表,这种表就会记录所有脚本版本的执行情况

你可能感兴趣的:(2020年数据中台)