flywaydb在项目中的使用

在频繁的工程实践中,服务端程序与数据库不断的更新,如果服务端和数据库部署不一致,经常性的会导致各种问题。为了解决这一问题,可行的方案之一就是让数据库随着服务端的版本而更新,flyway就是一种解决方案。

一. 目的 管理数据库更新。

二. 直接在java工程中嵌入sql脚本。工程重新部署时,会自动更新数据库,保证数据库与代码同步,避免了手动更新数据库带来的弊病。

flywaydb:主要是再第一次启动的时候创建flyway_schema_history表,然后去加载classpath下的文件进行执行,并且再表中记录加载的版本号记录。

之所以我需要在项目中使用它,注意是为了方便统一管理数据,由于我们项目初期,经常的变更数据库,如果要发布到测试环境,预发布等环境,有时候可能会漏掉sql未执行。

使用方式:

我们项目目前都是spring boot编写的,引入flywaydb 其实比较简单。

1.引入依赖:

 <dependency>    <groupId>org.flywaydb</groupId>    <artifactId>flyway-core</artifactId></dependency>springboot已经集成了flyway,加入依赖时并不需要添加版本号

2. 在你项目的resource下新建

在classpath:db/migration/mysql 目录下创建数据库脚本  (这个目录可以随便命名)

你需要升级的数据库脚本都放在这个下面

3. 在你的配置文件中配置 flywaydb 的信息:

spring:  application:    name: springboot-flyway  flyway:    enabled: true    # 禁止清理数据库表    clean-disabled: true    # 如果数据库不是空表,需要设置成 true,否则启动报错    baseline-on-migrate: true    # 与 baseline-on-migrate: true 搭配使用    baseline-version: 0     #数据库连接配置    url: ${spring.datasource.url}    user: ${spring.datasource.username}    password: ${spring.datasource.password}    locations:      - classpath:db/migration/mysql #(根据个人情况设置,多个路径使用逗号分隔)    #版本控制日志表,默认flyway_schema_history    table: flyway_schema_history

4.IDEA 中使用可以安装一个 flyway 的插件使用,sql文件有两种规则

第一种:versioned migration V<VERSION>__<NAME>.sql 首先是 V ,然后是版本号,如果版本号有多个数字,使用_分隔,比如1_0_0版本号的后面是 2 个下划线,最后是 SQL 脚本的名称。

第二种:Repeatable migration R<Repeatable>__<NAME>.sql 这个里面的sql每次项目启动都会执行。 例如:R__user.sql

这里需要注意:V 开头的只会执行一次,下次项目启动不会执行,也不可以修改原始文件,否则项目启动会报错,如果需要对 V 开头的脚本做修改,如果有个 SQL 脚本需要在每次启动的时候都执行,那么将 V 改为 R 开头即可。

使用flyway创建表后,就不要再去数据库手动改这张表的结构了,一切表的结构改动都用flyway,否则会影响修改记录,导致项目报错

上述两种情况的解决方案:找到flyway_schema_history表,删除对应的记录即可

我们项目中,我使用的是V开头的规则,项目启动会在数据库表中插入一条记录。只有启动一次原文件不能再被修改,否则启动会报错,如果又有新的脚本需要添加 可以重新新建一个文件。不建议直接去修改数据库中 flyway_schema_history的记录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值