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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。