`

数据库版本管理工具flyway的使用心得

阅读更多

今天测试了一下flyway的功能,在使用过程中遇到几个问题消耗了我一上午时间,网上也没有找到相应的解决方案,自己摸索了一上午,终于搞定了。

我的项目是使用maven构建的web项目,依赖代码:

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>3.2.1</version>
</dependency>

 在spring中添加如下配置:

    <bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">  
	    <property name="dataSource" ref="dataSource"/>
	</bean> 

 数据库的dataSource请根据实际情况自己配置。

 

在项目的resources/db/migration下创建sql文件V1.0.0__20151125.sql文件,再次启动后正常。

 

这时如果再新建一个sql文件,如V1.0.1__20151126.sql,故意把sql语句写错,比如写错表名,再启动时,会发现启动报错,提示表名错误。 如果把这个 sql修改正确后,再次重启,会发现以下错误:

 

com.googlecode.flyway.core.migration.MigrationException: Migration to version 1.0.1 failed! Please restore backups and roll back database and code!
at com.googlecode.flyway.core.migration.DbMigrator.migrate(DbMigrator.java:158)

出现这个问题我当时就蒙了,不知道如何解决,无论怎么重启都是这个错误,网上也没有最终的解决办法,最终我看了一下源码,发现有repair方法,于是把applicationContext.xml中flyway配置修改,把migrate修改为repair,再次启动,启动成功,再刷新schema_version表,发现出错的那条记录已被删除;再把配置文件中的repair还原为migrate后启动,这次启动成功了,并且V1.0.1中的语句已执行完成。

回到源码看Repair的注释,意思大致是:

Repairs the Flyway metadata table. This will perform the following actions:
Remove any failed migrations on databases without DDL transactions (User objects left behind must still be cleaned up manually)
Correct wrong checksums

 修改flyway的元数据表,即修改schema_version表中的数据,这个操作会做以下操作:

1、删除所有失败的非事务性数据库ddl操作;(用户对象如表、视图等需要手工清除)

2、修正错误的sql文件校验码(当文件修改过后,生成的校验码会改变)。

 

如果后期在生产环境部署时遇到同样的错误,可以考虑使用命令行的形式调用repair来修复版本数据。

分享到:
评论

相关推荐

    flyway-springboot.zip_springboot集成flyway数据库版本管理工具

    Flyway是基于Java的数据库版本管理工具,它允许你以SQL脚本的形式来管理数据库的结构变化。每次数据库的修改都可以被视为一个版本,这些版本按照时间顺序排列,确保了数据库的演变历史清晰有序。Flyway支持多种...

    数据库版本控制Flyway的demo

    Flyway是一个流行的开源工具,用于管理数据库版本,确保在多用户环境下数据库的一致性和完整性。本Demo将详细介绍如何使用Flyway进行数据库版本控制。 Flyway的核心概念是迁移(Migrations),每个迁移代表数据库的...

    flyway数据库版本管理

    Flyway是一款强大的开源数据库版本管理工具,它采用了“规约优于配置”的设计理念。这一理念强调的是通过预设的行为模式简化配置,减少错误的可能性,使开发者能够更加专注于业务逻辑而不是复杂的配置细节。Flyway的...

    flyway-4.0.3数据库执行工具

    Flyway是一款开源的数据库版本控制工具,用于管理数据库版本,帮助开发者进行数据库迁移。在数据库应用开发中,随着项目的迭代,数据库结构的变化是不可避免的,Flyway提供了一种规范化的、自动化的方式来跟踪、管理...

    flyway 5.1.1-windows 数据库升级降级工具

    Flyway 是一个开源的数据库版本控制工具,专为管理数据库迁移而设计。它允许开发者以结构化和自动化的方式处理数据库的版本升级和降级,从而确保数据库与应用程序代码的同步。在本例中,我们讨论的是Flyway 5.1.1 的...

    java版本控制(数据库版本控制)

    在IT行业中,数据库版本控制是至关重要的,尤其是在大型项目中,因为它们需要跟踪和管理数据库结构的变化,确保团队协作的顺畅以及数据的一致性。Java作为一种广泛应用的编程语言,提供了多种实现数据库版本控制的...

    SpringBoot整合flyway实现步骤解析

    Flyway是一个流行的数据库版本控制工具,它可以与SpringBoot框架集成,以实现自动化的数据库版本控制。在本文中,我们将详细介绍如何将Flyway与SpringBoot集成,实现数据库版本控制。 一、引入依赖 在使用Flyway...

    SpringBoot整合Flyway的方法(数据库版本迁移工具)

    Flyway是一个开源的数据库版本管理工具,可以独立于应用实现管理并跟踪数据库的变更。Flyway根据自己的约定,不需要复杂的配置就可以实现数据的Migrate。Migrations可以写成SQL脚本,也可以写在Java代码中,Flyway还...

    flyway支持人大金仓数据库jar包

    基于flyway的6.5.7版本修改flway-core ,支持国产数据库,暂时处于自测阶段,使用连接kingbase进行管理正常。

    flyway-commandline-6.4.2-windows-x64.zip

    Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations 可以写成 ...

    springboot集成flyway实现数据库版本自动升级及冲突问题解决

    springboot集成flyway实现数据库版本自动升级及冲突问题解决,灵活实现升级语句的自主执行

    SpringBoot项目中配置Flyway.docx

    Flyway是一款开源的数据库版本管理工具,它可以独立于应用实现并管理数据库变更,支持数据库版本自动升级。在Spring Boot框架中,默认封装了Flyway,只需要简单的配置就可以使用,其使用遵循Spring Boot框架的“约定...

    kingbase-flyway

    kingbase 数据库 flyway 插件,导入此jar在依赖 flyway-8.5.13.jar 版本即可,人大金仓 数据库 国产数据库

    SpringBoot项目集成Flyway进行数据库版本控制的详细教程

    Flyway是开源的数据库版本管理工具,它倾向于规约优于配置的方式。通过添加依赖项,我们可以使用Flyway的功能。 其次,需要在application.properties文件中添加Flyway的配置。FlywayProperties提供了多个参数来控制...

    flyway-commandline-6.4.2-linux-x64.tar.gz

    Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations 可以写成 ...

    Flyway数据库迁移工具详解.docx

    通过这种方式,Flyway能有效解决数据库版本管理的问题,使得在不同环境间的数据库迁移变得更加有序和可靠。无论是新项目还是已有项目的后期集成,Flyway都能提供强大的支持,确保数据库的版本控制与代码保持一致,...

    详解Spring Boot中使用Flyway来管理数据库版本

    Spring Boot 中使用 Flyway 管理数据库版本 在实际开发中,我们经常会遇到数据库版本管理的...在 Spring Boot 应用中使用 Flyway 管理数据库版本可以解决数据库版本管理的问题,使得数据库结构的管理更加方便和可靠。

    flyway支持达梦数据库版本jar包

    flyway支持达梦数据库版本jar包,拿来即用

    Java开发案例-springboot-27-整合Flyway实现数据库版本控制-源代码+文档.rar

    Java开发案例-springboot-27-整合Flyway实现数据库版本控制-源代码+文档.rar Java开发案例-springboot-27-整合Flyway实现数据库版本控制-源代码+文档.rar Java开发案例-springboot-27-整合Flyway实现数据库版本控制-...

    flyway-commandline

    Flyway是一款强大的数据库版本管理工具,它以Java为基础,旨在帮助开发者和运维人员有效地管理和维护数据库的演变。在软件开发过程中,随着项目的发展,数据库结构也会随之改变,这些变化需要被系统地记录和管理,...

Global site tag (gtag.js) - Google Analytics