Spring Boot接入Flyway-SQL脚本管理神器

在项目中做好脚本自动化管理,是每个开发者都应该考虑的第一件事情,为后续数据模型的变更做好迭代管控,使得修改表模型不再成为头疼的一件事。

以下从接入步骤和使用技巧两方面带大家快速认识一下flyway

接入步骤

  • 在pom.xml中引入flyway
 <properties>
   <flyway.version>5.2.4</flyway.version>
 </properties>
<!-- 数据库脚本管理 -->
<dependencies>
  <!--  other pom -->
  <dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>${flyway.version}</version>
  </dependency>
</dependencies>
  • 在application.yml中增加配置信息
spring:
  flyway:
    # flyway 的 clean 命令会删除指定 schema 下的所有 table, 应该禁掉
    clean-disabled: true
    # 启用 flyway
    enabled: true
    #设定 SQL 脚本的目录,多个路径使用逗号分隔
    locations: classpath:META-INF/migrations
    # 初始化schema_version表
    baseline-on-migrate: true
    #设定 flyway 的 metadata 表名, 缺省为 flyway_schema_history
    table: security_flyway_schema_history
    #多人协作开发, 很可能先 apply 了自己本地的最新 SQL 代码, 然后发现其他同事早先时候提交的 SQL 代码还没有 apply,
    #所以 开发环境应该设置 spring.flyway.outOfOrder=true, 这样 flyway 将能加载漏掉的老版本 SQL 文件;
    #生产环境建议为 spring.flyway.outOfOrder=false
    out-of-order: false
    #需要 flyway 管控的 schema list, 缺省的话, 使用的时 dbsource.connection直连上的那个 schema,
    #可以指定多个schema, 但仅会在第一个schema下建立 metadata 表, 也仅在第一个schema应用migration sql 脚本.
    #但flyway Clean 命令会依次在这些schema下都执行一遍
    #schemas: {database.schema}
    encoding: UTF-8
  • 在yml文件locations配置的目录中增加自己的sql脚本(目录自己手动创建即可)


    注意脚本命名,‘__’前半部分是版本号,建议用格式化时间;后半部分是脚本名称
  • 项目启动时会自动执行没有执行过的sql脚本,看日志和flyway的脚本表即可。
2020-07-14 16:04:48.731 - INFO  o.f.c.i.license.VersionPrinter : Flyway Community Edition 5.2.4 by Boxfuse
2020-07-14 16:04:48.733 - INFO  o.f.c.i.database.DatabaseFactory : Database: jdbc:mysql://192.168.100.214:3360/dten_security (MySQL 5.7)
2020-07-14 16:04:48.806 - INFO  o.f.core.internal.command.DbValidate : Successfully validated 12 migrations (execution time 00:00.040s)
2020-07-14 16:04:48.820 - INFO  o.f.core.internal.command.DbMigrate : Current version of schema `dten_security`: 1.20200713.04
2020-07-14 16:04:48.822 - INFO  o.f.core.internal.command.DbMigrate : Migrating schema `dten_security` to version 1.20200714.01 - INIT RIGHT TABLE
2020-07-14 16:04:48.845 - INFO  o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema `dten_security` (execution time 00:00.033s)

flyway日志表:security_flyway_schema_history

使用技巧

  • sql命名时版本号部分以时间戳命名,精确到天,如果当天多个脚本,再加个自增序号
  • sql脚本名称部分,建议一张表变动为一个文件,按单一职责原则,后续有变动好维护;ddl和dml也建议分开,命名时能望名知义,了解当前脚本能做什么操作
    如:

V1_20200624_01__INIT_DATABASE.sql
V1_20200628_01__INIT_APP_TABLE.sql
V1_20200628_02__INIT_RIGHT_TABLE.sql
V1_20200710_01__INIT_ORG_TABLE.sql
V1_20200710_02__ADD_USER_TABLE.sql
V1_20200710_03__INIT_USER_TABLE.sql
V1_20200713_01__ADD_SEQUENCE_TABLE.sql
V1_20200713_02__ADD_SEQ_FUNC.sql
V1_20200713_03__ALTER_USER_TABLE.sql
V1_20200713_04__ALTER_APP_TABLE.sql
V1_20200714_01__INIT_RIGHT_TABLE.sql

  • 如果执行后想变动脚本,再次启动应用会报错,这种情况下,删除flyway日志表中相应记录,重启应用即可。
    联系作者:do_believe@163.com
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355