18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在SpringBoot中重試調(diào)用第三方API教程

jf_78858299 ? 來(lái)源:JAVA旭陽(yáng) ? 作者:JAVA旭陽(yáng) ? 2023-05-11 10:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

作為后端程序員,我們的日常工作就是調(diào)用一些第三方服務(wù),將數(shù)據(jù)存入數(shù)據(jù)庫(kù),返回信息給前端。但你不能保證所有的事情一直都很順利。像有些第三方API,偶爾會(huì)出現(xiàn)超時(shí)。此時(shí),我們要重試幾次,這取決于你的重試策略。

下面舉一個(gè)我在日常開(kāi)發(fā)中多次看到的例子:

public interface OutSource {
    List;
}

@Service
public class OutSourceImpl implements OutSource {

    static Random random = new Random();
    @Override
    public List{
        //mock failure
        if (random.nextInt(2) == 1)
            throw new TimeOutException();
        return List.of(1, 2, 3);
    }
}


@Slf4j
@Service
public class ManuallyRetryService {

    @Autowired
    private OutSource outSource;

    public List{
        log.info("trigger time:{}", retryTimes);

        if (retryTimes > 3) {
            return List.of();
        }

        try {
            List

看看上面這段代碼,我認(rèn)為它可以正常工作,當(dāng)retryTimes達(dá)到4時(shí),無(wú)論如何我們都會(huì)得到最終結(jié)果。但是你覺(jué)得寫的好嗎??jī)?yōu)雅嗎?下面我來(lái)介紹Spring中的一個(gè)組件:spring-retry,我們不妨來(lái)試一試。

Spring-Retry介紹使用

spring-retry是Spring中的提供的一個(gè)重試框架,提供了注解的方式,在不入侵原有業(yè)務(wù)邏輯代碼的方式下,優(yōu)雅的實(shí)現(xiàn)重處理功能。

安裝依賴

  • 如果你的是gradle應(yīng)用,引入下面的依賴
implementation 'org.springframework.boot:spring-boot-starter-aop''org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.retry:spring-retry'
  • 如果你的項(xiàng)目使用的是maven項(xiàng)目,引入下面的依賴
<dependency>
    <groupId>org.springframework.retry<span class="hljs-name"groupId>
    <artifactId>spring-retry<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>

<dependency>
    <groupId>org.springframework.boot<span class="hljs-name"groupId>
    <artifactId>spring-boot-starter-aop<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>

啟用重試功能

添加@EnableRetry注解在入口的類上從而啟用功能。

@SpringBootApplication
//看過(guò)來(lái)
@EnableRetry
public class TestSpringApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestSpringApplication.class, args);
    }

}

應(yīng)用

我們以前面的為例,看看怎么使用,如下面的代碼:

public interface OutSource {
    List;
}

@Service
public class OutSourceImpl implements OutSource {

    static Random random = new Random();
    @Override
    public List{
        //mock failure will throw an exception every time
        throw new TimeOutException();
    }
}

@Slf4j
@Service
public class RetryableService {

    @Autowired
    private OutSource outSource;

    // 看這里
    @Retryable(value = {TimeOutException.class}, maxAttempts = 3)
    public List{
        log.info("trigger timestamp:{}", System.currentTimeMillis() / 1000);

        List
  • 關(guān)鍵在于Service層中的實(shí)現(xiàn)類中添加了 @Retryable注解,實(shí)現(xiàn)了重試, 指定value是TimeOutException異常會(huì)進(jìn)行重試,最大重試maxAttempts3次。

驗(yàn)證

這一次,當(dāng)我們?cè)L問(wèn)http://localhost:8080/retryable時(shí),我們將看到瀏覽器上的結(jié)果失敗。然后在你的終端上看到:

INFO 66776 --- [nio-9997-exec-1] c.m.testspring.service.RetryableService  : trigger timestamp:1668236840
 INFO 66776 --- [nio-9997-exec-1] c.m.testspring.service.RetryableService  : trigger timestamp:1668236841
 INFO 66776 --- [nio-9997-exec-1] c.m.testspring.service.RetryableService  : trigger timestamp:1668236842
ERROR 66776 --- [nio-9997-exec-1] c.m.t.controller.RetryTestController     : retryable final exception

總結(jié)

本文分享了spring-retry重試框架最基礎(chǔ)的使用,可以無(wú)侵入業(yè)務(wù)代碼進(jìn)行重試。關(guān)于spring-retry更多的使用建議可以自己去官網(wǎng)https://github.com/spring-projects/spring-retry 探索。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1959

    瀏覽量

    65711
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3982

    瀏覽量

    67493
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    341

    瀏覽量

    15629
  • SpringBoot
    +關(guān)注

    關(guān)注

    0

    文章

    175

    瀏覽量

    573
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何把第三方庫(kù)加到PROTEUS

    新手求教,弱弱的問(wèn)下,下了一個(gè)第三方庫(kù),說(shuō)是要先安裝,再添加路徑,可是我下來(lái)的第三方庫(kù)沒(méi)有看到安裝文件啊。還望指教如何添加!
    發(fā)表于 06-15 22:32

    如何在LabVIEW嵌入第三方軟件界面

    如何把第三方軟件的界面嵌入到labview,并且能夠LabVIEW的前面板對(duì)第三方軟件進(jìn)行操作。LabVIEW中有Active用于IE
    發(fā)表于 04-27 23:06

    labview 通過(guò)API調(diào)用第三方軟件 無(wú)法通過(guò)ID獲取窗口元素的句柄

    labview 通過(guò)API調(diào)用第三方軟件無(wú)法通過(guò)ID獲取窗口元素的句柄
    發(fā)表于 12-11 17:41

    第三方dll調(diào)用問(wèn)題?。?!

    第三方dll,沒(méi)有.h,labview怎么實(shí)現(xiàn)調(diào)用,dll可以用VS打開(kāi),類庫(kù)說(shuō)明也有
    發(fā)表于 05-11 09:14

    LabVIEW與第三方軟件交互問(wèn)題

    現(xiàn)在做一個(gè)軟件,就是通過(guò)LabVIEW去與第三方軟件進(jìn)行交互操作!已經(jīng)通過(guò)百度找到了利用user32.dll調(diào)用FindWindowA與PostMessage去實(shí)現(xiàn)對(duì)計(jì)算器,找了多方資料也沒(méi)有找到解決辦法。想做一個(gè)軟件就是對(duì)圖片2
    發(fā)表于 12-26 17:13

    國(guó)內(nèi)知名第三方檢測(cè)認(rèn)證機(jī)構(gòu)排名

    的檢測(cè)機(jī)構(gòu)介入,成熟的第三方檢測(cè)機(jī)構(gòu)介入商品檢測(cè)十九世紀(jì)中葉已經(jīng)很普遍了,并成為一種自覺(jué)的商業(yè)行為。目前中國(guó)已經(jīng)成為了全球貿(mào)易大國(guó),經(jīng)濟(jì)實(shí)力躍居世界第二,強(qiáng)勁的對(duì)外貿(mào)易增長(zhǎng)態(tài)勢(shì)促進(jìn)了檢測(cè)行業(yè)的不斷
    發(fā)表于 07-19 16:57

    關(guān)于LabVIEW調(diào)用第三方exe,如何去控制第三方exe按鈕的問(wèn)題

    我想調(diào)用第三方的exe,但并沒(méi)有給出任何接口,就單單一個(gè)exe程序,通過(guò)查資料得出可以用window自帶的user32.dll可以控制第三方的軟件,通過(guò)FindWindowA函數(shù)找到該軟件句柄,通過(guò)
    發(fā)表于 08-12 16:37

    頭文件包含第三方文件

    macrocmake如果源文件(例如 CPP)包含第三方頭文件,但是頭文件(例如 hpp)不包含該第三方文件頭,采用 PRIVATE。如果源文件和頭文件中都包含該
    發(fā)表于 08-18 08:10

    鴻蒙開(kāi)源第三方組件資料合集

    1、鴻蒙開(kāi)源第三方組件——日志工具組件Timber_ohosTimber_ohos是一個(gè)帶有小型可擴(kuò)展API的日志工具組件,它可以給開(kāi)發(fā)者提供統(tǒng)一的API接口,來(lái)記錄不同類型的日志,幫助開(kāi)發(fā)者管理
    發(fā)表于 03-23 09:53

    Framework下調(diào)用第三方的C++算法庫(kù)

    我這里是JNI調(diào)用一個(gè)語(yǔ)音處理庫(kù),這些庫(kù)廠商會(huì)以非開(kāi)源的so庫(kù)文件形式提供。JNI在編譯時(shí)需要依賴它,所以需要先預(yù)編譯安裝第三方庫(kù)。解決方法:同一個(gè)Android.mk編寫就行:L
    發(fā)表于 11-24 17:37

    鴻蒙開(kāi)發(fā)怎么引入第三方庫(kù)

    多個(gè) API 外也是支持組件庫(kù)的調(diào)用的,那么鴻蒙應(yīng)用開(kāi)發(fā)是如何與第三方庫(kù)銜接的呢? 加載一張圖片是每個(gè)應(yīng)用所需的功能, Android 平臺(tái)提供的有 Glide、ImageLoad
    的頭像 發(fā)表于 10-11 14:11 ?4939次閱讀

    調(diào)用第三方 API 接口會(huì)遇到哪些問(wèn)題

    了 11、接口時(shí)好時(shí)壞 12、文檔和接口邏輯不一致 13、欠費(fèi)了 ? 前言 實(shí)際工作,我們經(jīng)常需要在項(xiàng)目中調(diào)用第三方API接口,獲取數(shù)據(jù)
    的頭像 發(fā)表于 05-29 14:31 ?2113次閱讀

    調(diào)用第三方API接口會(huì)遇到哪些問(wèn)題?如何解決?

    實(shí)際工作,我們經(jīng)常需要在項(xiàng)目中調(diào)用第三方API接口,獲取數(shù)據(jù),或者上報(bào)數(shù)據(jù),進(jìn)行數(shù)據(jù)交換和通信。
    的頭像 發(fā)表于 11-30 11:05 ?3550次閱讀
    <b class='flag-5'>調(diào)用</b><b class='flag-5'>第三方</b><b class='flag-5'>API</b>接口會(huì)遇到哪些問(wèn)題?如何解決?

    谷歌開(kāi)放ZenDeviceEffects API,助第三方應(yīng)用實(shí)現(xiàn)睡前屏幕管理

    據(jù)報(bào)道,谷歌近日安卓 15 開(kāi)發(fā)者預(yù)覽版 2 推出了全新 ZenDeviceEffects API,允許第三方應(yīng)用訪問(wèn)數(shù)字健康的就寢模式功能。
    的頭像 發(fā)表于 05-08 16:41 ?951次閱讀

    如何集成第三方支付API到電商網(wǎng)站

    ? 電商網(wǎng)站,集成第三方支付API是確保交易安全、提升用戶體驗(yàn)的關(guān)鍵步驟。本文將逐步指導(dǎo)您完成整個(gè)流程,從選擇支付提供商到上線后的監(jiān)控。文章結(jié)構(gòu)清晰,包含代碼示例和實(shí)用建議,幫助您
    的頭像 發(fā)表于 07-16 10:35 ?258次閱讀
    如何集成<b class='flag-5'>第三方</b>支付<b class='flag-5'>API</b>到電商網(wǎng)站