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

基于jvm-sandbox的imock開發(fā)指南詳解

 更新時間:2023年08月11日 09:06:42   作者:李梨同學(xué)  
這篇文章主要為大家介紹了基于jvm-sandbox的imock開發(fā)指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

需求

  • 支持java后端服務(wù)方法級別的mock,對沒有測試環(huán)境的第三方服務(wù)進(jìn)行mock,增加團(tuán)隊(duì)覆蓋率。
  • 啟用,返回用戶自定義的mock響應(yīng)結(jié)果
  • 停用,返回服務(wù)本身的結(jié)果

通過一系列調(diào)研,最終工具選型了基于 jvm-sandbox的mock服務(wù),是Java方法級別的mock,操作就是監(jiān)聽指定方法,返回指定的mock內(nèi)容。

1、項(xiàng)目介紹

imock 包含mock-module、mock-web ,mock-module就是jvm-sandbox的模塊,需要安裝到目標(biāo)應(yīng)用服務(wù)器,mock-web 為mock服務(wù)后臺,imock是前后端分離,還有一個前端react 項(xiàng)目 imcok-web

ume_mock_backend :http://git1.local.umetrip.com/guanhongli/ume_mock_backend

ume_mock_frontend :http://git1.local.umetrip.com/guanhongli/ume_mock_frontend

2、imock使用

首先將前后端項(xiàng)目都跑起來,安裝依賴啥的先把環(huán)境調(diào)通。

2.1、啟動imock-web

本地環(huán)境:直接idea啟動即可

容器環(huán)境:java -jar啟動

nohup?java?-jar?/opt/applog/MskyLog/mock/mock-web.jar?>?myout.txt?2>&1?&

2.2、準(zhǔn)備mock-module

2.2.0.本地安裝

到項(xiàng)目下的bin目錄執(zhí)行 install-local.sh,通過腳本編譯mock-module,如需修改代碼要重新執(zhí)行此腳本。

2.2.1.修改cfg

#?心跳上報配置??當(dāng)環(huán)境變量沒有配置的時候使用?該配置
#?mock?服務(wù)的地址和端口
mock.host=http://172.24.146.219:8003
#?標(biāo)識目標(biāo)應(yīng)用的名稱
app.name=test-umeapp-checkin
#?標(biāo)識目標(biāo)應(yīng)用的環(huán)境
app.env=test-umeapp-checkin

2.2.2.拷貝到sandbox-module目錄

將cfg和mock-module拷貝到sandbox/sandbox-module目錄下。

cd?/opt/applog/MskyLog/mock
cp?/opt/applog/MskyLog/mock/mock-module.jar??/opt/app/sandbox/sandbox-module
cp?-r?/opt/applog/MskyLog/mock/cfg??/opt/app/sandbox/sandbox-module

2.2.3.拷貝到.sandbox-module目錄

cp?/opt/applog/MskyLog/mock/mock-module.jar?/opt/app/.sandbox-module

2.2.4.創(chuàng)建mock日志目錄

mkdir?-p?/home/jboss5/logs/sandbox/mock/

2.3、attch掛載目標(biāo)應(yīng)用

jps命令查看pid

cd?/opt/app/sandbox/bin/
./sandbox.sh?-p?22

2.4、查看log

2.4.1、查看sandbox.log

tailf?/opt/applog/MskyLog/sandbox/sandbox.log

2.4.2、查看mock.log

tailf?/home/jboss5/logs/sandbox/mock/mock.log

2.4.3、查看服務(wù)log

結(jié)合log和error日志來看

tailf?/opt/applog/MskyLog/UmeCki/UmeCki_info.log
tailf?/opt/applog/MskyLog/UmeCki/UmeCki_trace.log
tailf?/opt/applog/MskyLog/UmeCki/UmeCki_err.log

3、遇到的問題

3.1、mock切面問題,增加before返回

看代碼mock邏輯是在afterReturning中實(shí)現(xiàn)的,這樣的話是不是原代碼邏輯還是會執(zhí)行,只是修改了返回給調(diào)用方的Object或者Exception。比如我想mock調(diào)用銀行支付邏輯,但是還是會實(shí)際支付,所以切面放在before(Advice advice)并且結(jié)合returnImmediately會不會效果更好。

作者的代碼afterReturning方法是通過advice.getReturnObj().getClass()來獲取類,然后把ro.getReturnData()序列化到對象中。

  • 如果before方法,則advice.getReturnObj()為空,空指針無法獲取類對象。
  • 如果mock方法的值返回為空,則依然無法獲取對象類型。

因此需要換一個方法獲取類對象

使用advice.getTarget()方法來獲取對象類型,使用advice.getBehavior()獲取方法名稱。

Method?method?=?advice.getTarget().getClass().getMethod(advice.getBehavior().getName());
returnType?=?method.getGenericReturnType();
LogUtil.info2("returnType=",?String.valueOf(returnType));
Object?res1?=?JSON.parseObject(ro.getReturnData(),?returnType);
LogUtil.info2("res1=",?res1.toString());

但經(jīng)過測試只有springboot可以用,dubbo接口advice.getTarget()為空。

在 Dubbo 中,advice.getTarget() 返回 null 可能是由于 Dubbo 的代理機(jī)制導(dǎo)致的。Dubbo 使用代理對象來實(shí)現(xiàn)遠(yuǎn)程服務(wù)的調(diào)用,代理對象是在運(yùn)行時動態(tài)生成的,而真正的目標(biāo)對象是通過 Dubbo 的遠(yuǎn)程調(diào)用機(jī)制獲取的。因此,在 Dubbo 的 Advice 中,advice.getTarget() 返回的是代理對象,而不是真正的目標(biāo)對象。由于代理對象并不是目標(biāo)對象本身,因此可能返回 null

在 Spring Boot 中,advice.getTarget() 返回的是目標(biāo)對象,因?yàn)?Spring Boot 使用的代理機(jī)制與 Dubbo 不同。Spring Boot 中的 AOP 代理通常是通過 JDK 動態(tài)代理或 CGLIB 生成的,這些代理對象會保留對目標(biāo)對象的引用,因此在 Advice 中調(diào)用 advice.getTarget() 可以獲取到目標(biāo)對象的引用,不會返回 null。

接著找其他的辦法。。。

通過advice.getBehavior().getReturnType()

Method?method?=?advice.getBehavior().getReturnType().getMethod(advice.getBehavior().getName());

完美解決!

//?獲取方法的返回對象類型
Object?res1?=?JSON.parseObject(ro.getReturnData(),?advice.getBehavior().getReturnType());
LogUtil.info2("res1=",?res1.toString());

3.2、報錯time字段不為空

解決辦法:修改數(shù)據(jù)庫讓字段可以為空。

3.3、imock-web

java.lang.TypeNotPresentException: Type org.springframework.boot.maven.RepackageMojo not present

后續(xù)

至此,通過本地調(diào)試,二次開發(fā)imock已經(jīng)能夠符合我們公司的需求,后續(xù)再針對個性化的需求進(jìn)行開發(fā),更多關(guān)于jvm-sandbox imock開發(fā)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringCloud微服務(wù)基礎(chǔ)簡介

    SpringCloud微服務(wù)基礎(chǔ)簡介

    今天帶大家學(xué)習(xí)一下SpringCloud微服務(wù)的相關(guān)知識,文中有非常詳細(xì)的圖文示例及介紹,對正在學(xué)習(xí)SpringCloud微服務(wù)的小伙伴們很有幫助哦,需要的朋友可以參考下
    2021-05-05
  • MyBatis通用的10種寫法總結(jié)大全

    MyBatis通用的10種寫法總結(jié)大全

    這篇文章主要給大家介紹了關(guān)于MyBatis通用的10種寫法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • SpringBoot讀取配置的6種方式

    SpringBoot讀取配置的6種方式

    本文主要介紹了SpringBoot讀取配置的6種方式,主要包括使用默認(rèn)配置、使用application.properties文件、使用application.yml文件、使用@Value注解、使用Environment對象和使用ConfigurableEnvironment對象,感興趣的可以了解一下
    2023-08-08
  • java計算指定日期為本年第幾周的實(shí)例

    java計算指定日期為本年第幾周的實(shí)例

    本文介紹了在編程中按周統(tǒng)計數(shù)據(jù)時遇到的問題,由于mysql中按所在月的周數(shù)周統(tǒng)計比較麻煩,采用所在年的周數(shù)作為分組條件,并通過java計算日期屬于年的第一周來進(jìn)行二次計算,提高性能,同時,作者也分享了計算指定日期為本年第幾周的方法,并指出了一些常見方法的缺陷
    2025-11-11
  • java垃圾回收原理之GC算法基礎(chǔ)

    java垃圾回收原理之GC算法基礎(chǔ)

    本章簡要介紹GC的基本原理和相關(guān)技術(shù), 下一章節(jié)再詳細(xì)講解GC算法的具體實(shí)現(xiàn)。各種垃圾收集器的實(shí)現(xiàn)細(xì)節(jié)雖然并不相同,但總體而言,垃圾收集器都專注于兩件事情:查找所有存活對象,拋棄其他的部分,即死對象,不再使用的對象
    2022-01-01
  • Java使用modbus-master-tcp實(shí)現(xiàn)modbus tcp通訊

    Java使用modbus-master-tcp實(shí)現(xiàn)modbus tcp通訊

    這篇文章主要為大家詳細(xì)介紹了另外一種Java語言的modbux tcp通訊方案,那就是modbus-master-tcp,文中的示例代碼講解詳細(xì),需要的可以了解下
    2023-12-12
  • idea在用Mybatis時xml文件sql不提示解決辦法(提示后背景顏色去除)

    idea在用Mybatis時xml文件sql不提示解決辦法(提示后背景顏色去除)

    mybatis的xml文件配置的時候,有時候會沒有提示,這讓我們很頭疼,下面這篇文章主要給大家介紹了關(guān)于idea在用Mybatis時xml文件sql不提示的解決辦法,提示后背景顏色去除的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • IDEA設(shè)置JVM可分配內(nèi)存大小和其他參數(shù)的教程

    IDEA設(shè)置JVM可分配內(nèi)存大小和其他參數(shù)的教程

    這篇文章主要介紹了IDEA設(shè)置JVM可分配內(nèi)存大小和其他參數(shù)的教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java獲取當(dāng)前時間年月日的方法

    Java獲取當(dāng)前時間年月日的方法

    這篇文章主要為大家詳細(xì)介紹了Java獲取當(dāng)前時間年月日的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • MyBatis實(shí)現(xiàn)分頁的兩種方式

    MyBatis實(shí)現(xiàn)分頁的兩種方式

    本文詳細(xì)比較了MyBatis中的邏輯分頁(如RowBounds)、物理分頁(基于數(shù)據(jù)庫的LIMIT/OFFSET)和插件式分頁(如PageHelper)的優(yōu)缺點(diǎn)及應(yīng)用場景,強(qiáng)調(diào)了在處理大數(shù)據(jù)量時選擇物理分頁的重要性,以及MyBatis-Plus的分頁便利性,對mybatis分頁相關(guān)知識感興趣的朋友一起看看吧
    2025-07-07

最新評論

台南市| 铜鼓县| 云梦县| 隆林| 金门县| 淄博市| 文安县| 绥阳县| 滨海县| 韶山市| 巴中市| 安义县| 巴南区| 建水县| 陆良县| 哈巴河县| 张家港市| 监利县| 钟山县| 乃东县| 宣威市| 宜兴市| 黎城县| 江门市| 恩施市| 进贤县| 罗山县| 伊金霍洛旗| 沂源县| 金沙县| 扬中市| 如东县| 皋兰县| 登封市| 天峻县| 乐清市| 滨州市| 临洮县| 罗源县| 祥云县| 旅游|