flyway常用配置_flyway使用指南

说明

这一段时间项目变更比较大,经常修改表结构,然后各个环境数据库均为修改,一不小心就忘掉了,等出问题才发现表结构没有更新;遂寻找数据库版本控制工具;最终确定为flyway。

flyway说明

按照官网的说明:

Version control for your database. Robust schema evolution across all your environments.With ease, pleasure and plain SQL.

脚本文件名定义

$PREFIX$VERSION__$REMARK.$SUBFIX

常用格式如上: $preifx表示前缀,可在配置中指定,默认为 V

$version 表示 版本,中单可以使用 . 或 _分隔,在解析时会将_转换为.保存到schema_history表的version字段中;

$remark 表示备注,解析后会将这部分写入到描述字段中;

$subfix 表示后缀,可在配置中指定,默认为.sql;

版本与描述之前使用__分隔;

与spring boot的整合

在官网的文档中找到插件部分:

在链接中找到spring boot

在spring boot插件与集成页面中再选择配置属性

可以配置的属性

到这里,与spring boot 整合的步骤就有了,加入pom依赖并配置相应的属性即可;

引入maven依赖

org.flywaydb

flyway-core

5.2.4

增加相应的配置

# 说明,在spring boot 1.x中,属性前缀为flyway,在spring boot 2.x中为spring.flyway,需要区分不同版本

flyway:

# 到新的环境中数据库中有数据,且没有flyway_schema_history表时,是否执行迁移操作,如果设置为false,在启动时会报错,并停止迁移;如果为true,则生成history表并完成所有的迁移,要根据实际情况设置;

baseline-on-migrate: false

# 执行执行时标记的tag 默认为<>

baseline-description: <>

# 是否启用flyway

enabled: true

# 检测迁移脚本的路径是否存在,如不存在,则抛出异常

check-location: true

# 脚本位置

locations: classpath:db/migration

# 在迁移时,是否校验脚本,假设V1.0__初始.sql已经迁移过了,在下次启动时会校验该脚本是否有变更过,则抛出异常

validate-on-migrate: true

特别说明:如果非空数据库迁移,在目标数据库中手动建flyway_schema_history表并手动写入初始化的脚本记录,使flyway跳过最初的校验即可,后续可以保证版本的统一;

验证

项目启动有如下日志信息,表明校验成功;

spring boot 中 flyway自动配置原理

spring boot 自动化配置,其中已经内置了flyway的功能;

spring boot 自动化配置的核心是Conditional的几个注解,根据注解来看,需要符合以下几个条件:

存在Flyway的类;

存在Datasource的类;

存在flyway起始的配置属性且enable的属性值为true;

//生成Flyway的实例

@Bean

@ConfigurationProperties(prefix = "flyway")

public Flyway flyway() {

Flyway flyway = new SpringBootFlyway();

if (this.properties.isCreateDataSource()) {

flyway.setDataSource(this.properties.getUrl(), this.properties.getUser(),

this.properties.getPassword(),

this.properties.getInitSqls().toArray(new String[0]));

}

else if (this.flywayDataSource != null) {

flyway.setDataSource(this.flywayDataSource);

}

else {

flyway.setDataSource(this.dataSource);

}

flyway.setLocations(this.properties.getLocations().toArray(new String[0]));

return flyway;

}

//生成FlywayMigrationInitializer的实例

@Bean

@ConditionalOnMissingBean

public FlywayMigrationInitializer flywayInitializer(Flyway flyway) {

return new FlywayMigrationInitializer(flyway, this.migrationStrategy);

}

//这个类实现了InitalizingBean接口,可以在依赖注入完成后执行一些操作

public class FlywayMigrationInitializer implements InitializingBean, Ordered

//委托flyway对象完成数据库的迁移命令,到这里,spring boot中flyway的操作完成.

@Override

public void afterPropertiesSet() throws Exception {

if (this.migrationStrategy != null) {

this.migrationStrategy.migrate(this.flyway);

}

else {

this.flyway.migrate();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值