spring框架集成flyway项目的详细过程

 更新时间:2021年07月13日 14:23:19   作者:天下没有收费的bug  
今天通过本文给大家分享spring框架集成flyway项目的详细过程,由于大多数都是springboot集成flyway,很少见到spring框架的项目,今天就抽空给大家介绍下spring框架集成flyway项目的方法,一起看看吧

什么是Spring

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。

   Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
  然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
   目的:解决企业应用开发的复杂性
   功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
   范围:任何Java应用
   它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

Flyway简介

Flyway是一个数据库版本化管理工具,通过SQL脚本实现DB Migration自动化升级,支持独立运行,也可以和构建工具或者Spring开发环境集成。

最近给公司项目集成flyway,由于我们项目移动端使用的是spring框架,网上看了很多博客,感觉这方面的东西还是很少的,毕竟现在是springboot的天下,大多数都是springboot集成flyway。但是还是有不少公司遗留有spring框架的项目。这里就自己肝一篇,希望能帮到更多想把flyway添加到spring项目中的人。

由于使用的是spring框架。因此我们选择低版本的flyway。

flyway各个版本请到这里去找:https://mvnrepository.com/artifact/org.flywaydb/flyway-core
我们的maven使用的是阿里云的仓库,阿里云仓库中没有低版本的依赖,我们我们需要下载jar包。这里下载的是3.0版本的jar包。

下载的包需要拷贝到项目webapp/WEB-INF/lib中(web项目都会有WEB-INF这个文件夹,只需要找到你项目中web文件夹就行,web文件夹,就是文件夹上有个蓝点的,具体看下图的webapp文件夹)

新建资源目录resources
在其下面建立db/migration(sql文件默认读取此路径下的文件夹中的.sql文件)

在pom.xml中添加,如果不添加,resources中的文件就无法打包到war包中。

 <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
    </resource>

添加flyway配置类,更多配置请看源代码

package com.dt.flyway;


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.FlywayException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


/**
 * @Description: flyway配置类
 * @author: 
 * @Date: 2021/7/12 15:57
 * @Copyright: Xi'an Dian Tong Software Co., Ltd. All Rights Reserved.
 * @Version 1.0
 */
public class DatabaseFlywayMigration {
    protected final static Logger log = LogManager.getLogger("DatabaseFlywayMigration");

    public void migrate() throws NamingException {
        log.info("DatabaseFlywayMigration-->migrate:flyway开始执行,准备获取数据源");
        Context context = new InitialContext();
        //获取tomcat中的数据源
        DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/wxi");
        log.info("DatabaseFlywayMigration-->migrate:获取数据源成功,准备执行flyway配置");
        Flyway flyway = new Flyway();
        // 设置sql脚本文件的编码
        flyway.setEncoding("UTF-8");
        flyway.setOutOfOrder(true);
        flyway.setDataSource(dataSource);
        // 设置接受flyway进行版本管理的多个数据库
        //flyway.setSchemas("flywaydemo");
        // 设置存放flyway metadata数据的表名
         flyway.setTable("flyway_schema_history");
        // 设置执行migrate操作之前的validation行为
        //flyway.setValidationMode(ValidationMode.ALL);
        // 设置当validation失败时的系统行为
        //flyway.setValidationErrorMode(ValidationErrorMode.FAIL);

        // 设置当validation失败时的系统行为
        try {
            flyway.setInitOnMigrate(true);
            log.info("DatabaseFlywayMigration-->migrate:配置成功,即将执行sql语句");
            flyway.migrate();
            log.info("DatabaseFlywayMigration-->migrate:sql语句执行成功,flyway---END");
        } catch (FlywayException e) {
            log.error("DatabaseFlywayMigration-->migrate:执行sql语句失败,请查看日志排查错误");
            flyway.repair();
            e.printStackTrace();
        }
    }
}

在spring的xml中注入flyway配置类的bean(每个spring项目都会带有一个xml文件,用来注册bean,复制的时候注意项目中DatabaseFlywayMigration所在的路径)

<!-- flayway -->
<bean id="flywayMigration1" class="com.dt.flyway.DatabaseFlywayMigration" lazy-init="false" init-method="migrate"> </bean>


到这里,移动端整合flyway就完成了。
以后这些sql语句,只需要放到resources/db/migration文件夹下面即可(但是这些sql命名都是不符合flyway的,需要进行名称的修改)

命名规则:
此处的SQL语句命名需要遵从一定的规范,否则运行的时候flyway会报错。命名规则主要有两种:

仅需要被执行一次的SQL命名以大写的”V”开头,后面跟上”0~9”数字的组合,数字之间可以用“.”或者下划线”“分割开,然后再以两个下划线 _ 分割,其后跟文件名称,最后以.sql结尾。比如,V20210707__create_user.sql、V20210707__add_user.sql。
可重复运行的SQL,则以大写的“R”开头,后面再以两个下划线分割,其后跟文件名称,最后以.sql结尾。。比如,R__truncate_user_dml.sql。

其中,V开头的SQL执行优先级要比R开头的SQL优先级高。

V:固定大写

20210707.01:20210707是日期,后面用.01代表序号

因为flyway的执行是有个顺序的,比如你执行了V2021__create_user,有执行V2020_update_user。就会报错,原因就是2020<2021。所以我们要保证序号是依次增大。

Flyway 是如何比较两个 SQL 文件的先后顺序呢?它采用 采用左对齐原则, 缺位用 0 代替 。举几个例子:

1.0.1.1 比 1.0.1 版本高。
1.0.10 比 1.0.9.4 版本高。
1.0.10 和 1.0.010 版本号一样高, 每个版本号部分的前导 0 会被忽略。

__:这个是两个 _
例如:
V2.0.9__upgrade.sql
V2.0.11__upgrade.sql
V2.0.13__upgrade.sql
V2.0.14__upgrade.sql

作者:天下没有收费的bug出处:https://www.cnblogs.com/LoveBB/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。

到此这篇关于spring集成flyway的文章就介绍到这了,更多相关spring集成flyway内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java基础题新手练习(一)

    Java基础题新手练习(一)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 新手了解java基础知识(二)

    新手了解java基础知识(二)

    这篇文章主要介绍了Java基础知识,本文介绍了Java语言相关的基础知识、历史介绍、主要应用方向等内容,需要的朋友可以参考下,希望对你有所帮助
    2021-07-07
  • Spring Service功能作用详细讲解

    Spring Service功能作用详细讲解

    service层测试较简单,目前大多数测试主要是针对public方法进行的。依据测试方法划分,可以分为两种:基于mock的隔离测试和基于dbunit的普通测试
    2022-12-12
  • SpringBoot中MyBatis-Flex的集成和使用实现

    SpringBoot中MyBatis-Flex的集成和使用实现

    MyBatis-Flex是一个基于MyBatis的数据访问框架,MyBatis-Flex能够极大地提高我们的开发效率和开发体验,本文主要介绍了SpringBoot中MyBatis-Flex的集成和使用实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 分别在Groovy和Java中创建并初始化映射的不同分析

    分别在Groovy和Java中创建并初始化映射的不同分析

    这篇文章主要为大家介绍了分别在Groovy和Java中创建并初始化映射的不同分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

    2022-03-03
  • 解析Jmeter脱离Jenkins后Ant集成邮件通知问题

    解析Jmeter脱离Jenkins后Ant集成邮件通知问题

    今天来讲下本地的ant构建并发送邮件。配置下来挺顺利也挺简单的,对Jmeter脱离Jenkins后Ant集成邮件通知问题感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • 使用MyBatis-Plus实现联表查询分页的示例代码

    使用MyBatis-Plus实现联表查询分页的示例代码

    本文主要讲述了如何在SpringBoot项目中使用MyBatis-Plus的分页插件,通过这个示例,可以学会如何利用MyBatis-Plus进行高效的分页查询,感兴趣的可以了解一下
    2024-10-10
  • idea maven项目无法识别jar包里的class解决方案

    idea maven项目无法识别jar包里的class解决方案

    这篇文章主要介绍了idea maven项目无法识别jar包里的class解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • springboot之security FilterSecurityInterceptor的使用要点记录

    springboot之security FilterSecurityInterceptor的使用要点记录

    这篇文章主要介绍了springboot之security FilterSecurityInterceptor的使用要点记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java编程abstract类和方法详解

    java编程abstract类和方法详解

    这篇文章主要介绍了java编程abstract类和方法详解,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12

最新评论