亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:2日期:2023-07-03 11:07:52
什么是Spring

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

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

Flyway簡介

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

最近給公司項目集成flyway,由于我們項目移動端使用的是spring框架,網(wǎng)上看了很多博客,感覺這方面的東西還是很少的,畢竟現(xiàn)在是springboot的天下,大多數(shù)都是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文件夾,就是文件夾上有個藍(lán)點(diǎn)的,具體看下圖的webapp文件夾)

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

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

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

在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開始執(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)行版本管理的多個數(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失敗時的系統(tǒng)行為//flyway.setValidationErrorMode(ValidationErrorMode.FAIL);// 設(shè)置當(dāng)validation失敗時的系統(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語句失敗,請查看日志排查錯誤'); flyway.repair(); e.printStackTrace();} }}

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

<!-- flayway --><bean lazy-init='false' init-method='migrate'> </bean>

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

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

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

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

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

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

V:固定大寫

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

因為flyway的執(zhí)行是有個順序的,比如你執(zhí)行了V2021__create_user,有執(zhí)行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 版本號一樣高, 每個版本號部分的前導(dǎo) 0 會被忽略。

__:這個是兩個 _ 例如:V2.0.9__upgrade.sqlV2.0.11__upgrade.sqlV2.0.13__upgrade.sqlV2.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)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 国产三级在线观看视频不卡 | 色日韩| 久久综合综合久久 | 优女视频免费观看 | 国产在线视频国产永久视频 | 中文乱码一二三四有限公司 | 2021久久精品国产99国产精品 | 久久亚洲国产成人精品性色 | 国产成人夜色影视视频 | 亚洲精品在线影院 | 综合国产福利视频在线观看 | 久久中文字幕视频 | 97精品高清一区二区三区 | 黄色a网 | 国产一级一片免费播放 | 国产亚洲日本 | 91网址在线观看 | www视频在线观看 | 国产巨乳在线 | 国产在线精品福利一区二区三区 | 国产一区亚洲 | 成年美女黄网站色视频大全免费 | www三级免费 | 久久三级国产 | 日本aaaaa级毛片 | a国产精品 | 国产午夜视频在线观看第四页 | 美国毛片在线 | 成人国产精品一级毛片了 | 在线日韩麻豆一区 | 日韩一级片网址 | 国内成人免费视频 | 在线成人免费看大片 | 2级毛片| 美女全黄网站免费观看 | 男女性高清爱潮视频免费观看 | 亚洲狠狠婷婷综合久久久久网站 | 99久久国语露脸精品国产 | 国产hs免费高清在线观看 | 亚洲一区二区三区四区热压胶 | 精品国产品国语在线不卡丶 |