Flyway
是什么:如果说git是代码的版本控制,那么flyway就是数据库的版本控制
解决问题:
- 正如git解决协作开发的问题,flyway一样解决了多人协同设计数据库的问题
- 修改或修复数据库结构
- 修复错误数据
竞品:Liquibase(https://www.liquibase.org/)
工作方式(https://flywaydb.org/getstarted/how),官网上有相关的图片介绍:
基本上应用方式:
1、增加表结构,这边建议分开DDL和DML,默认在 这个目录:db/migration(可以通过FlywayProperties的location值覆盖实现,在spring boot yml文件中一般是这样)
flyway:
locations:
- db/migration
- db/ddl
2、修复错误的表结构或数据,注意文件的格式是 前缀__版本号__描述.后缀,一般是这样的
V1_init_db.sql
最近面试官有问到V可不可以用别的替代
首先,可以改。通过配置覆盖,具体字段就不再描述了,很容易从配置类里面找到
其次,可以用默认的R,表示可以重复执行,可以用于清除数据库的缓存数据或者常规产生的过期数据等
其他一些常见的配置参数
flyway.baseline-description对执行迁移时基准版本的描述.
flyway.baseline-on-migrate当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.
flyway.baseline-version开始执行基准迁移时对现有的schema的版本打标签,默认值为1.
flyway.check-location检查迁移脚本的位置是否存在,默认false.
flyway.clean-on-validation-error当发现校验错误时是否自动调用clean,默认false.
flyway.enabled是否开启flywary,默认true.
flyway.encoding设置迁移时的编码,默认UTF-8.
flyway.ignore-failed-future-migration当读取元数据表时是否忽略错误的迁移,默认false.
flyway.init-sqls当初始化好连接时要执行的SQL.
flyway.locations迁移脚本的位置,默认db/migration.
flyway.out-of-order是否允许无序的迁移,默认false.
flyway.password目标数据库的密码.
flyway.placeholder-prefix设置每个placeholder的前缀,默认${.
flyway.placeholder-replacementplaceholders是否要被替换,默认true.
flyway.placeholder-suffix设置每个placeholder的后缀,默认}.
flyway.placeholders.[placeholder name]设置placeholder的value
flyway.schemas设定需要flywary迁移的schema,大小写敏感,默认为连接默认的schema.
flyway.sql-migration-prefix迁移文件的前缀,默认为V.
flyway.sql-migration-separator迁移脚本的文件名分隔符,默认__
flyway.sql-migration-suffix迁移脚本的后缀,默认为.sql
flyway.tableflyway使用的元数据表名,默认为schema_version
flyway.target迁移时使用的目标版本,默认为latest version
flyway.url迁移时使用的JDBC URL,如果没有指定的话,将使用配置的主数据源
flyway.user迁移数据库的用户名
flyway.validate-on-migrate迁移时是否校验,默认为true.