编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

flywaydb在项目中的使用

wxchong 2024-06-19 22:26:06 开源技术 32 ℃ 0 评论

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

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

二. 直接在java工程中嵌入sql脚本。工程重新部署时,会自动更新数据库,保证数据库与代码同步,避免了手动更新数据库带来的弊病。之所以我需要在项目中使用它,注意是为了方便统一管理数据,由于我们项目初期,经常的变更数据库,如果要发布到测试环境,预发布等环境,有时候可能会漏掉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的记录。


虽然这种方式有时候会简化我们更新数据脚本的问题,但是也会带来一些越权问题。无法保证每个伙伴的脚本都是符合数据库规范的。像一般公司对数据库的操作权限都有明确划分的,比如你要修改表结构,需要DBA进行脚本审查的,符合要求才进行调整。所以是否可以使用还是要考虑下项目要求等。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表