db脚本持续集成: flyway创建、管理和版本化数据库

db脚本持续集成: flyway创建、管理和版本化数据库

flyway是什么

Flyway 是一种开源的数据库迁移工具,可以帮助开发者将数据库的版本管理集成到应用程序中。它使用简单的 SQL 脚本来管理数据库的版本和升级。Flyway 支持多种主流的数据库(如 MySQL、PostgreSQL、Oracle、SQL Server 等),使得在不同数据库之间进行迁移变得更加容易和灵活。

Flyway 是基于约定优于配置的原则,提供了一系列命名规范和组织结构,使得创建、管理和版本化数据库变得更加可预期和可重复。Flyway 的核心思想是版本化控制数据库,每个版本通过 SQL 脚本进行管理,这样可以让开发者更好地维护数据库结构的稳定性和一致性。

Flyway 还提供了多种集成方式,可以让开发者轻松地与项目中其他工具(如 Maven、Gradle、Spring Boot 等)进行集成。同时,Flyway 还支持多种部署方式,包括命令行、Java 应用程序、Web 应用程序等,方便开发者进行灵活的部署和扩展。

总之,Flyway 是一个功能强大、易于上手、灵活可扩展的开源数据库版本控制工具,可以帮助开发者更好地管理其数据库结构和数据,并让数据库的变更更加可预期和易于维护

springboot应用启动集成flyway

pom引入flyway依赖包

	<dependency>
		<groupId>org.flywaydb</groupId>
		<artifactId>flyway-core</artifactId>
		<version>7.9.1</version>
	</dependency>

flyway执行的sql存放的目录

resources
    dbflyway
        my-application-name2.30.0
            my-application-name2.30.0_01__filename.sql
        my-application-name2.31.0
            my-application-name2.31.0_01__filename.sql

flyway的配置bean

org.flywaydb.core.api.configuration.ClassicConfiguration

ClassicConfiguration定义了可以配置的参数

场景一:之前那已经单独执行,现在迁移到应用启动执行,需要忽略之前执行的。从指定版本开始执行

#yaml的配置应该为:
spring:
  application:
    name: my-application-name
  flyway:
    # 启动flyway
    enabled: true
    #  
    schemas: public
    # sql文件前缀名
    sql-migration-prefix: my-application-name
    # baselineOnMigrate 和baselineVersion配置从指定版本开始执行
    baselineOnMigrate: true
    # 执行的版本
    baselineVersion: 2.31.0
    ignoreIgnoredMigrations: true
    # flyway执行的记录,
    table: flyway_schema_history
    # flyway执行的sql目录
    locations: classpath:dbflyway,classpath:sql/fix,classpath:sql/poc

flyway_schema_history表结构及字段说明

flyway_schema_history这个表不需要我们创建,启动flayway会自动创建这个表。

installed_rank version description type script checksum installed_by installed_on execution_time success
主键递增的执行的id 版本/文件名前缀 取文件名没有版本的部分 记录类型 基线还是执行的SQL 执行名称全路径 文件的hash值
1 2.31.0 << Flyway Baseline >> BASELINE << Flyway Baseline >> null 2023-05-24 14:35:28.000767 0 true
2 2.31.0.01 create ssdlc origin save SQL my-application-name2.31.0/my-application-name2.31.0_01__create_business_table.sql -588013804 dbuser 2023-05-24 14:35:28.078776 44 true
  1. 注意已经跑过的文件,不要再修改,会导致计算的hash变化,checksum检查不通过。
  2. 每次都从基线开始跑,ckechsum一致则跳过

上面第二点,我们有一种场景,之前是在独立的机器执行flyway,现在要降本增效减少机器以及让我们的应用部署更加内聚,需要把flyway修改为应用启动时执行。我们要按照上面的配置再yaml里配置,并且指定基线版本,为我们最新的版本,flyway执行记录表要用新表跑,因为我们修改了sql的存放目录,以及之前一些迭代过程不规范的问题,因此指定flyway新建一张表。生成新的基线版本

create table flyway_schema_history1
(
    installed_rank integer                 not null
        constraint flyway_schema_history1_pk
            primary key,
    version        varchar(50),
    description    varchar(200)            not null,
    type           varchar(20)             not null,
    script         varchar(1000)           not null,
    checksum       integer,
    installed_by   varchar(100)            not null,
    installed_on   timestamp default now() not null,
    execution_time integer                 not null,
    success        boolean                 not null
);

alter table flyway_schema_history1
    owner to dev_root;

create index flyway_schema_history1_s_idx
    on flyway_schema_history1 (success);

猜你喜欢

转载自blog.csdn.net/u013565163/article/details/130848506