Flyway入门_flyrouter

Flyway入门_flyrouter1.为什么要用flyway?在真实的项目开发中,我们每个人都会有一个应用软件和与其相联系的数据库。对于个人开发来说,这样就够了。但是,项目开发一般都不止一个人,因此一定会出现我在我的本地有一套软件和相应的数据库系统,我的另一个同事会在他的本地有一套他自己的软件和相应的数据库系统。我们需要面临的第一个问题就是我们两个人如何集成我们的数据库系统,之后还要处理如何将数据库系统迁移到测试环境和生产环境当…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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.net/210300.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 详谈利用系统漏洞及mysql提权

    详谈利用系统漏洞及mysql提权提权,顾名思义就是提升权限,当我们getshell⼀个⽹站之后,⼤部分情况下我们的权限是⾮常低的,这时就需要利⽤提权,让原本的低权限(如只允许列⽬录)→⾼权限(拥有修改⽂件的能⼒),权限提升后,对接下来的渗透有很⼤帮助

    2022年7月27日
    7
  • java中的全局变量和局部变量_JVM中基本变量放在哪

    java中的全局变量和局部变量_JVM中基本变量放在哪正在使用NetBeans做一个稍大点的程序,刚刚学习使用,感觉程序中需要用到全局变量(其实java中是没有全局变量这个概念的)。在网上查了不少的资料,得到一点点体会:首先,java中是没有全局变量这个概念的,java程序中不能像C++那样在类外定义全局变量,因为JAVA当初出现的初衷就是为了安全性和跨平台性,所以去掉了类似C、C++中的全局变量的概念。JAVA中不应该有所谓全局变量的概念,全局变量…

    2022年8月21日
    7
  • 没有网线情况下使用树莓派连接WiFi

    没有网线情况下使用树莓派连接WiFi没有网线情况下使用树莓派连接WiFi烧录系统后,在boot/文件夹下创建wpa_supplicant.conf文件添加代码:country=CNctrl_interface=DIR=/var/run/wpa_supplicantGROUP=netdevupdate_config=1在尾部添加network={ssid=”你无线的名字”//无线名称psk=”你无线的密码”//无线密码}树莓派开机,可自动连接WiFi…

    2022年5月6日
    98
  • ByteBuffer的allocate和allocateDirect

    ByteBuffer的allocate和allocateDirect在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类。ByteBuffer提供了两种静态实例方式:Java代码publics

    2022年7月3日
    23
  • hdoj 2602 Bone Collector 【01背包】

    hdoj 2602 Bone Collector 【01背包】

    2022年1月14日
    43
  • 计算机编程入门教程

    计算机编程入门教程用什么语言可以写木马程序啊!!!首先确定你需要什么功能,如果是控制Http服务器的话,就是ASP木马,用脚本语言(VBS、JS)来写,Window自带的记事本就可以胜任如果是控制Windows的话,就属于一般的Win32木马,几乎什么程序都可以写,不管是MASM32、VC++、VB、Delphi、BCB都可以,个人推荐MASM32,毕竟汇编的东西短小精悍,而且设计直观方便,其他的语

    2022年6月16日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号