最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring框架集成flyway項(xiàng)目的詳細(xì)過程

 更新時(shí)間:2021年07月13日 14:23:19   作者:天下沒有收費(fèi)的bug  
今天通過本文給大家分享spring框架集成flyway項(xiàng)目的詳細(xì)過程,由于大多數(shù)都是springboot集成flyway,很少見到spring框架的項(xiàng)目,今天就抽空給大家介紹下spring框架集成flyway項(xiàng)目的方法,一起看看吧

什么是Spring

Spring是一個(gè)開源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。

   Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。
  然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。
   目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性
   功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能
   范圍:任何Java應(yīng)用
   它是一個(gè)容器框架,用來裝javabean(java對(duì)象),中間層框架(萬能膠)可以起一個(gè)連接作用,比如說把Struts和hibernate粘合在一起運(yùn)用。簡(jiǎn)單來說,Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

Flyway簡(jiǎn)介

Flyway是一個(gè)數(shù)據(jù)庫版本化管理工具,通過SQL腳本實(shí)現(xiàn)DB Migration自動(dòng)化升級(jí),支持獨(dú)立運(yùn)行,也可以和構(gòu)建工具或者Spring開發(fā)環(huán)境集成。

最近給公司項(xiàng)目集成flyway,由于我們項(xiàng)目移動(dòng)端使用的是spring框架,網(wǎng)上看了很多博客,感覺這方面的東西還是很少的,畢竟現(xiàn)在是springboot的天下,大多數(shù)都是springboot集成flyway。但是還是有不少公司遺留有spring框架的項(xiàng)目。這里就自己肝一篇,希望能幫到更多想把flyway添加到spring項(xiàng)目中的人。

由于使用的是spring框架。因此我們選擇低版本的flyway。

flyway各個(gè)版本請(qǐng)到這里去找:https://mvnrepository.com/artifact/org.flywaydb/flyway-core
我們的maven使用的是阿里云的倉庫,阿里云倉庫中沒有低版本的依賴,我們我們需要下載jar包。這里下載的是3.0版本的jar包。

下載的包需要拷貝到項(xiàng)目webapp/WEB-INF/lib中(web項(xiàng)目都會(huì)有WEB-INF這個(gè)文件夾,只需要找到你項(xiàng)目中web文件夾就行,web文件夾,就是文件夾上有個(gè)藍(lán)點(diǎn)的,具體看下圖的webapp文件夾)

新建資源目錄resources
在其下面建立db/migration(sql文件默認(rèn)讀取此路徑下的文件夾中的.sql文件)

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

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

添加flyway配置類,更多配置請(qǐng)看源代碼

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開始執(zhí)行,準(zhǔn)備獲取數(shù)據(jù)源");
        Context context = new InitialContext();
        //獲取tomcat中的數(shù)據(jù)源
        DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/wxi");
        log.info("DatabaseFlywayMigration-->migrate:獲取數(shù)據(jù)源成功,準(zhǔn)備執(zhí)行flyway配置");
        Flyway flyway = new Flyway();
        // 設(shè)置sql腳本文件的編碼
        flyway.setEncoding("UTF-8");
        flyway.setOutOfOrder(true);
        flyway.setDataSource(dataSource);
        // 設(shè)置接受flyway進(jìn)行版本管理的多個(gè)數(shù)據(jù)庫
        //flyway.setSchemas("flywaydemo");
        // 設(shè)置存放flyway metadata數(shù)據(jù)的表名
         flyway.setTable("flyway_schema_history");
        // 設(shè)置執(zhí)行migrate操作之前的validation行為
        //flyway.setValidationMode(ValidationMode.ALL);
        // 設(shè)置當(dāng)validation失敗時(shí)的系統(tǒng)行為
        //flyway.setValidationErrorMode(ValidationErrorMode.FAIL);

        // 設(shè)置當(dāng)validation失敗時(shí)的系統(tǒng)行為
        try {
            flyway.setInitOnMigrate(true);
            log.info("DatabaseFlywayMigration-->migrate:配置成功,即將執(zhí)行sql語句");
            flyway.migrate();
            log.info("DatabaseFlywayMigration-->migrate:sql語句執(zhí)行成功,flyway---END");
        } catch (FlywayException e) {
            log.error("DatabaseFlywayMigration-->migrate:執(zhí)行sql語句失敗,請(qǐng)查看日志排查錯(cuò)誤");
            flyway.repair();
            e.printStackTrace();
        }
    }
}

在spring的xml中注入flyway配置類的bean(每個(gè)spring項(xiàng)目都會(huì)帶有一個(gè)xml文件,用來注冊(cè)bean,復(fù)制的時(shí)候注意項(xiàng)目中DatabaseFlywayMigration所在的路徑)

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


到這里,移動(dòng)端整合flyway就完成了。
以后這些sql語句,只需要放到resources/db/migration文件夾下面即可(但是這些sql命名都是不符合flyway的,需要進(jìn)行名稱的修改)

命名規(guī)則:
此處的SQL語句命名需要遵從一定的規(guī)范,否則運(yùn)行的時(shí)候flyway會(huì)報(bào)錯(cuò)。命名規(guī)則主要有兩種:

僅需要被執(zhí)行一次的SQL命名以大寫的”V”開頭,后面跟上”0~9”數(shù)字的組合,數(shù)字之間可以用“.”或者下劃線”“分割開,然后再以兩個(gè)下劃線 _ 分割,其后跟文件名稱,最后以.sql結(jié)尾。比如,V20210707__create_user.sql、V20210707__add_user.sql。
可重復(fù)運(yùn)行的SQL,則以大寫的“R”開頭,后面再以兩個(gè)下劃線分割,其后跟文件名稱,最后以.sql結(jié)尾。。比如,R__truncate_user_dml.sql。

其中,V開頭的SQL執(zhí)行優(yōu)先級(jí)要比R開頭的SQL優(yōu)先級(jí)高。

V:固定大寫

20210707.01:20210707是日期,后面用.01代表序號(hào)

因?yàn)閒lyway的執(zhí)行是有個(gè)順序的,比如你執(zhí)行了V2021__create_user,有執(zhí)行V2020_update_user。就會(huì)報(bào)錯(cuò),原因就是2020<2021。所以我們要保證序號(hào)是依次增大。

Flyway 是如何比較兩個(gè) SQL 文件的先后順序呢?它采用 采用左對(duì)齊原則, 缺位用 0 代替 。舉幾個(gè)例子:

1.0.1.1 比 1.0.1 版本高。
1.0.10 比 1.0.9.4 版本高。
1.0.10 和 1.0.010 版本號(hào)一樣高, 每個(gè)版本號(hào)部分的前導(dǎo) 0 會(huì)被忽略。

__:這個(gè)是兩個(gè) _
例如:
V2.0.9__upgrade.sql
V2.0.11__upgrade.sql
V2.0.13__upgrade.sql
V2.0.14__upgrade.sql

作者:天下沒有收費(fèi)的bug出處:https://www.cnblogs.com/LoveBB/本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須在文章頁面給出原文鏈接,否則保留追究法律責(zé)任的權(quán)利。

到此這篇關(guān)于spring集成flyway的文章就介紹到這了,更多相關(guān)spring集成flyway內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

太湖县| 呼玛县| 巍山| 巨鹿县| 浙江省| 南和县| 连江县| 江西省| 马关县| 江华| 阳春市| 渝中区| 丹凤县| 中西区| 丹巴县| 阜城县| 南陵县| 西昌市| 宜州市| 怀集县| 志丹县| 辉县市| 红安县| 石渠县| 和林格尔县| 荆州市| 宜城市| 周口市| 莱州市| 濮阳市| 金寨县| 麻栗坡县| 祁连县| 镇赉县| 环江| 邵东县| 宜兰县| 来宾市| 清河县| 德兴市| 涪陵区|