大家好,又见面了,我是你们的朋友全栈君。
1.为什么要用flyway?
在真实的项目开发中,我们每个人都会有一个应用软件和与其相联系的数据库。对于个人开发来说,这样就够了。但是,项目开发一般都不止一个人,因此一定会出现我在我的本地有一套软件和相应的数据库系统,我的另一个同事会在他的本地有一套他自己的软件和相应的数据库系统。我们需要面临的第一个问题就是我们两个人如何集成我们的数据库系统,之后还要处理如何将数据库系统迁移到测试环境和生产环境当中去。其实道理和git合并代码一样的道理,当2个人或多个同时修改了一份代码那么我们如何进行数据库同步?在比如我们如果修改了脚本那么如何同步测试环境和生产环境,以上那么变得非常麻烦 现在就用到了我们的flyway Flyway是一款开源的数据库版本管理工具,Flyway可以独立于应用实现管理并跟踪数据库的变更,Flyway根据自己的约定,不需要复杂的配置就可以实现数据的Migrate。Migrations可以写成SQL脚本,也可以写在Java代码中,Flyway还支持Spring Boot。
2.Flyway的运行机制
首先flyway会指向一个空的数据库,他讲尝试找到其架构历史表。由于数据库是空的,Flyway将找不到它并将 改为创建它。现在有一个数据库,其中包含一个名为flyway_schema_history 的空表:
该表将用于跟踪数据库的状态。
紧接着,Flyway将开始扫描文件系统或应用程序的类路径以进行迁移。它们可以用Sql或Java编写。
然后根据版本号对迁移进行排序,并按顺序应用:
在应用每个迁移时,模式历史记录表会相应更新:
Flyway将再次扫描文件系统或应用程序的类路径以进行迁移。将根据架构历史记录表检查迁移。如果它们的版本号低于或等于标记为当前版本的版本号,则会忽略它们。
这句话非常重要,每当我重启项目的时候由于历史记录表中有了我们版本号,现在项目中的版本会跟历史记录表中版本进行比较,那么当我们想更新数据表的时候怎么办? 我们只需要定义一个高版本的记录表就可以让flyway去自动更新数据库表叫做迁移
总结一句话就是:flyway会去检查我们项目中的脚本同时为我们在历史记录表中记录版本,当有新的版本的时候就会更新如果已经在记录表中的时候就不需要做任何事情这样的过程为迁移(Migrate)
以下是sql脚本的命名规则:
首先我们需要一个大写的V作为版本的前缀标志,然后在后面紧跟着一个数字作为版本号,这个就是我之前提到的Flyway进行追踪的依据,在版本号后面需要下划线作为分隔符用来分割版本号和说明(这里特别需要注意的是分隔符是两个下划线)。 V1__xxxx.sql
配置详解:
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.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/210300.html原文链接:https://javaforall.cn