flyway使用实践

本文介绍了如何在SpringCloud Maven多模块项目中利用Flyway实现数据库版本控制,包括添加依赖、配置迁移路径及参数,以及如何在dev和生产环境中应用。重点在于首次上线时的自动数据库初始化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目背景

1、spring cloud,maven多模块项目,使用mysql数据库

需求

1、想实现数据库版本控制,特别是首次上线时候可以自动初始化数据库

具体操作

1、添加依赖
在pom文件中引入flyway-core依赖,版本根据自己需要定义,我这里是直接拿的父pom中的。

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

2、配置
然后在application.xml中添加如下配置,

spring:
  flyway:
    # 是否启用flyway
    enabled: true
    #禁用clean操作,禁止清理数据库表,生产环境上必须关闭flyway:clean指令,因为一旦误操作,所有数据将会被清空;
    clean-disabled: true
    # 迁移sql脚本文件存放路径,默认db/migration
    locations: classpath:db/migration
    # 检测迁移脚本的路径是否存在,如不存在,则抛出异常
    check-location: true
    # 编码格式,默认UTF-8
    encoding: UTF-8
    # 迁移sql脚本文件名称的前缀,默认V
    sql-migration-prefix: V
    # 迁移sql脚本文件名称的分隔符,默认2个下划线__
    sql-migration-separator: __
    # 迁移sql脚本文件名称的后缀
    sql-migration-suffixes: .sql
    # 迁移时是否进行校验,默认true
    validate-on-migrate: true
    # 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
    baseline-on-migrate: true
    #初始化设置版本
    baseline-version: 1.0.0.1
    #初始化设置描述
    baseline-description: init
    #是否允许无序的迁移,默认false,生产环境需要设置为false
    out-of-order: true

上面是dev环境的配置,因为我数据库已经存在,且不需要做sql脚本变动,所以设定初始化版本。生产环境把最后三个配置注释掉,使用默认配置。
再在Resources/db/migration目录下添加你的sql脚本,形如:V1.0.1__init.sql。
数据库脚本文件命名有约定的规则:
常用格式如下:
PREFIXPREFIXPREFIXVERSION__REMARK.REMARK.REMARK.SUBFIX

$prefix  表示 前缀,可在配置中指定,默认为 V;
$version 表示 版本号,版本号中也可以使用 . 或 _分隔,在解析时会将 _ 转换为 . 再保存到flyway_schema_history表的version字段中;
$remark  表示 备注,解析后会将这部分写入到描述字段中;
$subfix  表示 后缀,可在配置中指定,默认为 .sql ;
版本号与备注之前使用__分隔;

结果

程序启动后会在数据库生成一张表flyway_schema_history,
dev环境的配置只会有一条记录,version和script字段就是配置的值;
下图是生成环境的时候,会产生两条记录,第二条是执行初始化脚本的记录。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值