跳至主要內容

flyway

soulballad分布式其他flyway约 1909 字大约 6 分钟

文档

官网: Homepage - Flyway (flywaydb.org)open in new window

官方文档: Flyway Documentation - Flyway - Product Documentation (red-gate.com)open in new window

Flyway从入门到精通: [Java多线程 (yuque.com)

项目配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/svr_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC
    username: root
    password: 123456
    hikari:
      max-lifetime: 590000   #由于数据库设置,连接有效时间为600秒(10分钟),客户端的最大生命周期设置为600-10=590 秒,让客户端主动切换新连接,不是等服务器断开连接
      connection-timeout: 3000  #获取连接设置为3秒,目前服务器性能足够,不应该等待很久,如果确实需要等待,应该更早的失败。避免等待队列过长

  flyway:
    # 启用或禁用 flyway
    enabled: true
    #flyway 首次连接mysql的地址,这里固定写mysql的默认数据库“mysql“,业务数据库后续才创建。mysql专用写法
    url: jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC
    #flyway 首次连接mysql的用户名,保持和业务数据库的用户名一致
    user: ${spring.datasource.username}
    #flyway 首次连接mysql的密码,保持和业务数据库的密码一致
    password: ${spring.datasource.password}
    #当前服务使用的业务数据库,和业务数据库名称一致
    schemas: svr_test
    #检查业务数据库是否存在,如果不存在自动创建
    createSchemas: true
    # flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉。这个默认值是 false 理论上作为默认配置是不科学的。
    clean-disabled: true
    # SQL 脚本的目录,多个路径使用逗号分隔 默认值 classpath:db/migration
    locations: classpath:db/svr_iam/edge
    #  metadata 版本控制信息表 默认 flyway_schema_history
    table: flyway_schema_history
    # 如果没有 flyway_schema_history 这个 metadata 表, 在执行 flyway migrate 命令之前, 必须先执行 flyway baseline 命令
    # 设置为 true 后 flyway 将在需要 baseline 的时候, 自动执行一次 baseline。
    baseline-on-migrate: true
    # 指定 baseline 的版本号,默认值为 1, 低于该版本号的 SQL 文件, migrate 时会被忽略
    baseline-version: 0.8.0
    # 字符编码 默认 UTF-8
    encoding: UTF-8
    # 是否允许不按顺序迁移 开发建议 true  生产建议 false
    out-of-order: false
    # 需要 flyway 管控的 schema list,这里我们配置为flyway  缺省的话, 使用spring.datasource.url 配置的那个 schema,
    # 可以指定多个schema, 但仅会在第一个schema下建立 metadata 表, 也仅在第一个schema应用migration sql 脚本.
    # 但flyway Clean 命令会依次在这些schema下都执行一遍. 所以 确保生产 spring.flyway.clean-disabled 为 true
    #schemas: flyway
    # 执行迁移时是否自动调用验证   当你的 版本不符合逻辑 比如 你先执行了 DML 而没有 对应的DDL 会抛出异常
    validate-on-migrate: true

flyway最全配置

flyway:
  # 连接数据库的jdbc驱动的class全名,默认为空,flyway会根据url自动查找匹配的驱动
  driver: org.hsqldb.jdbc-driver
  # 是否开启flywary,默认true
  enabled: true
  # migration文件编码,默认UTF-8
  encoding: UTF-8
  # 在执行迁移时,是否将它们合并到同一个事务中
  group: false
  # locations使用逗号分隔,会对其指定的location进行递归查找,location的类型依配置的location的前缀而定,没有前缀的location或是以classpath:标记的location会在classpath上扫描sql或是java文件,以filesysytem标记的location会在文件系统上递归的查找非隐藏的migration文件,而且可以使用通配符
  locations: classpath:com.mycomp.migration, database/migrations, filesystem:/sql-migrations
  # 是否允许在同一迁移中混合事务性和非事务性语句,默认false
  mixed: false
  # 是否对migration文件流化处理,而不是全部的加载到内存之后再处理(如果migration文件很大,如1GB,一般也不会遇到这样的情况)
  stream: true
  # 默认名flyway_schema_history,如果在schemas配置了多个schema,那么flyway_schema_history表在第一个schema里面
  table: schema-history
  # 创建flyway_schema_history的表空间,此设置仅与支持表空间概念的数据库相关。对其它数据库不起作用
  tablespace: my-tablespace
  # 迁移时使用的目标版本,默认为latest version
  target: 5.7
  # 迁移时使用的JDBC URL,如果没有指定的话,将使用配置的主数据源
  url: jdbc:hsqldb:file:/db/flyway-sample
  # 迁移数据库的用户名
  user: SA
  # 目标数据库的密码
  password: mySecretPwd
  # 当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false
  baseline-on-migrate: false
  # 是否对migration文件进行批处理,可以节约带宽,当然对于处理大的migration文件而言
  batch: true
  # 开始执行基准迁移时对现有的schema的版本打标签,默认值为1
  baseline-version: 1.0
  # 对执行迁移时基准版本的描述
  baseline-description: '基准版本'
  # 逗号分隔的class文件名,在flyway生命周期内被回调引用
  callbacks: com.mycomp.project.CustomCallback,com.mycomp.project.AnotherCallback
  # 禁止清理数据库表
  clean-disabled: false
  # 当发现校验错误时是否自动调用clean,默认false.
  clean-on-validation-error: false
  # 检查迁移脚本的位置是否存在,默认false
  check-location: false
  # 连接数据库的最大的重试次数,每次尝试失败后,flyway会等待一秒然后继续重试到最大次数为止(不设置,就不重试,快速的失败)
  connect-retries: 10
  # 默认的schema,大小写敏感,是flyway在执行过程中默认的schema
  default-schema: schema1
  # 模拟迁移时sql语句输出文件,需要 flyway teams
  dry-run-output: /my/sql/dryrun-outputfile.sql
  # 用于覆盖特定SQL状态和错误的内置错误处理规则代码。需要 flyway teams。
  error-overrides: 99999:17110:E,42001:42001:W
  # 当读取元数据表时是否忽略错误的迁移,默认false
  ignore-future-migrations: false
  # 忽略已忽略的迁移,默认false
  ignore-ignored-migrations: false
  # 忽略丢失的migration文件,默认是false,针对老的系统可以进行设置
  ignore-missing-migrations: false
  # 当初始化好连接时要执行的SQL
  init-sqls: 
    - SET ROLE 'myuser' 
  # 记录到日志表中用来执行迁移的用户名
  installed-by: my-user
  # 是否启用对oracle SQL*Plus 的指令支持
  oracle-sqlplus: true
  # 当遇到 SQL*Plus 暂不支持的指令时,发出警告而不是抛出异常
  oracle-sqlplus-warn: true
  # 是否允许无序的迁移,默认false
  out-of-order: false
  # 执行迁移时,Flyway是否应输出包含查询结果的表
  output-query-results: false
  # 设置每个placeholder的前缀,默认${
  placeholder-prefix: '#['
  # 是否进行占位符替换,默认为true
  placeholder-replacement: true
  # 设置每个placeholder的后缀,默认}
  placeholder-suffix: ']'
  # [placeholder name]设置placeholder的value
  placeholders:
    aplaceholder: value
    otherplaceholder: value123
  # repeat文件前缀,默认是R
  repeatable-sql-migration-prefix: RRR
  # migration文件解析器,逗号分隔的全class文件名,相当于可以扩展内置的resolvers解析器
  resolvers: com.mycomp.project.-custom-resolver,com.mycomp.project.-another-resolver
  # 设定需要flywary迁移的schema,大小写敏感,默认为连接默认的schema
  schemas: schema1,schema2,schema3
  # 是否skip内置的解析器只使用定制化的解析器,默认是false
  skip-default-resolvers: false
  # 是否skip内置的callbacks,默认false
  skip-default-callbacks: false
  # 迁移文件的前缀,默认为V
  sql-migration-prefix: -migration-
  # 迁移脚本的文件名分隔符,默认__
  sql-migration-separator: --
  # 迁移脚本的后缀,默认为.sql
  sql-migration-suffixes: .sql,.pkg,.pkb
  # undo文件前缀,默认是U
  undo-sql-migration-prefix: downgrade
  # 迁移时是否校验,默认为true
  validate-on-migrate: true
  # 是否验证migration文件,默认是false,如果migration文件名格式不满足要求,skip,如果为true,快速失败
  validate-migration-naming: false
上次编辑于:
贡献者: soulballad