flyway
约 1909 字大约 6 分钟
文档
官网: Homepage - Flyway (flywaydb.org)
官方文档: Flyway Documentation - Flyway - Product Documentation (red-gate.com)
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