当前位置:   article > 正文

flywaydb在项目中的使用

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的记录。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/249073
推荐阅读
相关标签
  

闽ICP备14008679号