精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

五種實現方式配置Spring Boot API接口超時時間

開發 前端
在Spring Boot中,有多種方式可以配置API接口的超時時間。針對不同的應用場景,選擇正確的配置方式,可以確保系統在面對各種復雜場景時都能保持高效和穩定。

環境:SpringBoot3.4.0

1. 簡介

在開發API接口時,配置API接口的超時時間是一項非常重要的任務。超時時間的設置對于確保系統的穩定性和響應性至關重要。當客戶端發送請求到服務器時,如果服務器由于某些原因(如數據庫查詢緩慢、外部服務調用失敗等)無法及時響應,那么設置合理的超時時間可以防止服務器資源被長時間占用,從而避免系統崩潰或性能下降。

在Spring Boot中,有多種方式可以配置API接口的超時時間。針對不同的應用場景,選擇正確的配置方式,可以確保系統在面對各種復雜場景時都能保持高效和穩定。

本篇文章將通過的介紹如下幾種API超時情況的配置:

  • 事務超時時間配置
    如果你的當前的API接口涉及到事務相關,那么我們可以通過設置設置的超時時間來確保由于數據庫緩慢要引起的超時情況。
  • 基于Resilience4j的超時保護機制
    我們可以通過Resilience4j提供的超時機制來設置有效的超時時間。
  • 異步請求超時
    如果你當前請求是異步請求,那么我們可以通過配置異步超時時間來限制接口等待時間。
  • HTTP Client超時配置
    我們將介紹3種HTTP Client超時的配置,分別是RestTemplate,RestClient,WebClient。
  • 基于NGINX代理超時配置
    通常我們的后端接口一般會通過NGINX進行反向代理,在這種情況下,我們可以在其代理上配置超時時間。

2. 實戰案例

2.1 事務超時配置

我們可以在數據庫調用中實現請求超時的一種方法是利用Spring的@Transactional注解。該注解具有一個可以設置的超時屬性。該屬性的默認值為-1,相當于沒有設置任何超時。

@Transactional(timeout = 1)
public List<User> query() {
  this.userRepository.findById(8L).ifPresent(System.out::println) ;
  try {
    TimeUnit.SECONDS.sleep(1) ;
  } catch (InterruptedException e) {}
  return this.userRepository.findAll() ;
}

如上配置注解中配置超時時間為1s,內部執行時先根據id查詢,此時能正常執行,當休眠1s后,再次執行數據庫操作將拋出超時異常。

首先,我們進行如下異常配置:

@ExceptionHandler(TransactionTimedOutException.class)
public ResponseEntity<Object> txTimeout(TransactionTimedOutException ex) {
  return ResponseEntity.ok("請求超時: " + ex.getMessage()) ;
}

測試接口

@GetMapping
public ResponseEntity<Object> query() {
  return ResponseEntity.ok(this.userService.query()) ;
}

測試結果

圖片圖片

以上我們利用了事務的超時時間來保護接口。

2.2 基于Resilience4j的超時保護機制

Resilience4j提供了一個TimeLimiter模塊,專門用來處理超時保護的。

首先,引入下面依賴:

<dependency>
  <groupId>io.github.resilience4j</groupId>
  <artifactId>resilience4j-spring-boot3</artifactId>
  <version>2.2.0</version>
</dependency>

接下來,通過注解配置需要保護的接口

@TimeLimiter(name = "queryUser", fallbackMethod = "fallbackQuery")
@GetMapping
public CompletionStage<ResponseEntity<Object>> query() {
  return CompletableFuture.supplyAsync(() -> {
    try {
      // 模擬耗時操作
      TimeUnit.SECONDS.sleep(2) ;
    } catch (InterruptedException e) {}
    return ResponseEntity.ok("success") ;
  }) ;
}
public CompletionStage<ResponseEntity<Object>> fallbackQuery(Throwable e) {
  return CompletableFuture.completedStage(ResponseEntity.ok(e.getMessage())) ;
}

說明:

name:在配置文件中定義的超時相關配置,如果配置文件中沒有配置則使用默認的配置。
fallbackMethod:當發生超時現象將調用的降級方法。

注意:方法的返回值必須是CompletionStage類型。

最后,配置超時

resilience4j:
  timelimiter:
    instances:
      #該名稱為上面注解中的name
      queryUser:
        timeout-duration: 1s

測試結果

圖片圖片

此種方式是不是非常的簡單好用,一個注解搞定。

2.3 異步請求超時配置

當我們的API接口是異步請求時,我們可以直接在配置文件中對異步請求的超時時間進行配置:

spring:
  mvc:
    async:
      request-timeout: 1s

異步請求接口

@GetMapping("/async")
public Callable<String> async() {
  return () -> {
    try {
      TimeUnit.SECONDS.sleep(10) ;
    } catch (InterruptedException e) {
      return "任務中斷 - " + e.getMessage() ;
    }
    return "異步請求成功" ;
  } ;
}

測試結果

圖片圖片

雖然這里休眠了10s,但在1s后,直接輸出了異常信息。

2.4 HTTP Client超時配置

這里我們將介紹3種接口調用的超時配置,分別是:RestTemplateRestClient已經WebClient,其中RestTemplate與RestClient是基于阻塞式調用并且RestClient是Spring6.1版本開始提供的;而WebClient則是基于響應式的調用(非阻塞)。官方推薦使用WebClient

RestTemplate超時配置

@Bean
RestTemplate restTemplate(RestTemplateBuilder builder) {
  return builder
      // 連接超時配置
      .connectTimeout(Duration.ofSeconds(1))
      // 讀取超時配置
      .readTimeout(Duration.ofSeconds(1))
      .build() ;
}

這是最簡單的配置,你還可以通過如下工廠方式配置

@Bean
RestTemplate restTemplate() {
  ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.defaults()
      .withConnectTimeout(Duration.ofSeconds(1))
      .withReadTimeout(Duration.ofSeconds(1));
  RestTemplate restTemplate = new RestTemplate(
    ClientHttpRequestFactoryBuilder.detect().build(settings)) ;
  return restTemplate ;
}

根據你的環境選擇不同的方式進行配置。

RestClient超時配置

RestClient的配置方式與上面的RestTemplate差不多。

@Bean
RestClient restClient() {
  ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.defaults()
      .withConnectTimeout(Duration.ofSeconds(1))
      .withReadTimeout(Duration.ofSeconds(1)) ;
  return RestClient
      .builder()
      .requestFactory(ClientHttpRequestFactoryBuilder.detect().build(settings))
      .build() ;
}

最后,我們再來介紹官方推薦的WebClient。

WebClient超時配置

首先,我們要引入以下的依賴:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

下面進行超時配置:

@Bean
WebClient webClient() {
  HttpClient httpClient = HttpClient.create()
      .doOnConnected(conn -> conn
          .addHandlerLast(new ReadTimeoutHandler(1))
          .addHandlerLast(new WriteTimeoutHandler(1))) ;
  return WebClient.builder()
      .clientConnector(new ReactorClientHttpConnector(httpClient ))
      .build() ;
}

下面我們通過WebClient進行接口調用進行測試

訪問接口

@GetMapping("/client")
public String client() {
  try {
    TimeUnit.SECONDS.sleep(3) ;
  } catch (InterruptedException e) {
    return "任務中斷 - " + e.getMessage() ;
  }
  return "success" ;
}

通過WebClient訪問該接口:

private final WebClient webClient ;
this.webClient
  .get()
  .uri("http://localhost:8080/api/users/client")
  .retrieve()
  .bodyToMono(String.class)
  // 當發生錯誤時會自動調用該方法進行恢復繼續執行
  .onErrorResume(ex -> {
    return Mono.just("發生錯誤: " + ex.getMessage()) ;
  }) 
  .subscribe(System.out::println) ;

測試結果:

io.netty.handler.timeout.ReadTimeoutException: null
發生錯誤: null

以上就是關于HTTP Client的超時配置。

2.5 基于NGINX代理超時配置

通過NGINX反向代理配置超時時間

location / {
  proxy_pass http://127.0.0.1:8080;
  proxy_connect_timeout 1s;  # 連接超時時間為30秒
  proxy_send_timeout 1s;     # 發送請求超時時間為60秒
  proxy_read_timeout 1s;     # 讀取響應超時時間為60秒
}

當發生超時時,我們這里通過日志查看:

[error] 11172#27080: *1 upstream timed out 
  (10060: A connection attempt failed because the connected 
    party did not properly respond after a period of time, 
      or established connection failed because connected 
      host has failed to respond) while reading 
      response header from upstream, 
      client: 127.0.0.1, server: localhost, 
      request: "GET /api/users/client HTTP/1.1", 
      upstream: "http://127.0.0.1:8080/api/users/client", 
      host: "localhost:1080"

當發生異常,我們還可以進行如下的配置,進行友好提示:

location / {
  proxy_pass http://127.0.0.1:8080;
  proxy_connect_timeout 1s;  # 連接超時時間為30秒
  proxy_send_timeout 1s;     # 發送請求超時時間為60秒
  proxy_read_timeout 1s;     # 讀取響應超時時間為60秒
  # 指定自定義錯誤頁面
  error_page 504 /timeout.html;


  # 指定自定義錯誤頁面的位置
  location = /timeout.html {
    root D:/all/html/;
    internal;
  }
}

圖片圖片

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2025-02-13 07:45:26

APISpringHTTP

2025-06-06 08:28:56

2011-11-25 10:25:27

SpringJava

2011-02-28 13:51:30

Spring事物配置

2009-06-19 18:26:38

Spring事務配置

2022-08-18 09:38:02

Spring跨域

2024-10-14 09:20:09

異步流式接口

2024-10-18 08:00:00

SpringBoot框架開發

2024-09-29 09:31:08

Spring前綴URL

2025-03-12 02:00:55

API接口優化

2024-05-30 08:51:28

Spring數據分布式

2025-06-04 02:10:00

2025-10-27 01:00:00

2021-12-31 13:40:43

Spring Boot熱部署Java

2024-10-12 08:18:21

Spring接口組件

2025-06-12 02:00:00

Spring簽到打卡

2024-08-29 09:01:39

2023-11-01 15:07:51

環境配置方式

2024-11-29 07:42:47

2025-06-30 01:45:00

點贊
收藏

51CTO技術棧公眾號

国产无一区二区| 在线不卡视频| 日韩视频一区二区在线观看| 久久久久久久香蕉| 亚洲 美腿 欧美 偷拍| 美女网站一区二区| 欧美激情亚洲另类| 天天操天天舔天天射| 日本免费一区二区视频| 色国产综合视频| 一区二区三区导航| 欧美一卡2卡三卡4卡5免费| 国精产品一区一区三区视频| 国产无套粉嫩白浆在线2022年| 激情久久久久久久久久久久久久久久| 97免费中文视频在线观看| 日本综合在线观看| 久久悠悠精品综合网| 欧美日韩大陆一区二区| 干日本少妇首页| 中文字幕中文字幕在线中高清免费版| 国产亚洲一二三区| 国产精品一区二区三区精品| 亚洲天堂777| 另类亚洲自拍| 久久久伊人欧美| 午夜爽爽爽男女免费观看| 国产欧美日韩| 日韩电影中文字幕| 老司机午夜免费福利| 综合欧美精品| 欧美巨大另类极品videosbest| 激情五月宗合网| 欧美性受ⅹ╳╳╳黑人a性爽| 国产精品乱码久久久久久| 欧美日韩精品久久| 性xxxxbbbb| 成人av网站在线观看| 亚洲综合在线播放| 国产精品久久久久久久久毛片 | 久久久久久久久久免费视频| 亚洲国产日韩欧美在线| 久久精品99久久久久久久久| 久久久久亚洲av无码a片| 亚洲高清极品| 日韩国产在线看| 色婷婷精品久久二区二区密| 91精品啪在线观看国产爱臀 | 午夜精品一区二区三区国产| 揄拍成人国产精品视频| 免费人成又黄又爽又色| 亚洲免费观看高清完整版在线观| 亚洲精品国精品久久99热| 第四色在线视频| 久久久久观看| 亚洲精品视频网上网址在线观看| 日韩av一二区| 国产一区日韩| 蜜桃成人av| 亚洲第一色网站| 国产视频三区四区| 中文字幕精品无| 欧美激情在线| 欧美国产亚洲精品久久久8v| 欧美片一区二区| 欧美日韩亚洲国产精品| 精品国内自产拍在线观看| 国产一区在线观看免费| 中文字幕人成人乱码| 久久国产精品99国产精| 久久久精品人妻一区二区三区四| 红桃视频亚洲| 91精品国产99| 无码人妻精品一区二区蜜桃色欲| 日韩在线一区二区| 国产精品亚洲美女av网站| 91麻豆国产在线| 国产成人午夜电影网| 国精产品一区二区| 九色视频网站在线观看| 国产精品卡一卡二卡三| 穿情趣内衣被c到高潮视频| 男女在线观看视频| 欧美性xxxx在线播放| 性欧美1819| 欧美视频精品全部免费观看| 亚洲精品电影在线观看| 免费黄在线观看| 欧美成人精品| 国产mv免费观看入口亚洲| 国产一区二区在线不卡| 成人h动漫精品一区二| 久久亚洲免费| caoporm免费视频在线| 亚洲va欧美va天堂v国产综合| 黄www在线观看| 成人国产精品久久| 日韩国产激情在线| 女人裸体性做爰全过| 亚洲视频日本| 国产精品亚洲自拍| 天天av综合网| 亚洲欧美国产毛片在线| 久久久久久久少妇| 极品国产人妖chinesets亚洲人妖| 亚洲欧美自拍一区| 伊人365影院| 久久精品国产免费| 欧美一区二区视频17c| 久久久123| 欧美高清激情brazzers| 中日韩精品一区二区三区| 在线观看日韩| 国产精品精品视频| 色欲久久久天天天综合网| 久久久99免费| 狠狠干 狠狠操| 国产精品一区二区三区四区在线观看| 亚洲欧美日韩在线高清直播| 久久视频免费看| 麻豆国产欧美一区二区三区| 免费试看一区| xxxx成人| 亚洲精品在线观看网站| 91九色丨porny丨极品女神| 日韩国产在线一| 蜜桃视频在线观看成人| 91在线超碰| 亚洲第一网站免费视频| 91视频免费在线看| 久久爱另类一区二区小说| 国产亚洲欧洲黄色| 糖心vlog在线免费观看| 久久婷婷五月综合色丁香| 日韩久久精品电影| 欧美三级午夜理伦| 成人福利电影精品一区二区在线观看| 懂色av一区二区三区四区五区| 999国产精品亚洲77777| 国产视频欧美视频| 中日韩精品视频在线观看| 国产成人av网站| 成人区一区二区| 伊人精品综合| 欧美国产乱视频| 99视频在线观看免费| 亚洲蜜臀av乱码久久精品蜜桃| 天天操精品视频| 欧美一区高清| 高清不卡一区二区三区| 激情在线视频播放| 欧美精品一区二区三区高清aⅴ| 青青草原在线免费观看视频| 国产乱理伦片在线观看夜一区| 大桥未久一区二区三区| 精品一区二区三区中文字幕| 免费av一区二区| 亚洲第一精品网站| 午夜激情一区二区三区| 免费看黄色aaaaaa 片| 久久综合激情| 亚洲成人av动漫| 成人污污www网站免费丝瓜| 久久99精品国产99久久6尤物| 亚洲欧美激情国产综合久久久| 亚洲一二三专区| 极品粉嫩小仙女高潮喷水久久| 国产精品资源| 亚洲 国产 欧美一区| 亚洲日韩中文字幕一区| 久久久久久久久久婷婷| 天天综合天天色| 欧美在线影院一区二区| 麻豆天美蜜桃91| 波多野结衣亚洲一区| 97在线免费公开视频| 欧美限制电影| 91黄在线观看| 成人av三级| 久久艳片www.17c.com| 日本加勒比一区| 欧美在线制服丝袜| 美国黄色小视频| 久久免费视频一区| 爱豆国产剧免费观看大全剧苏畅| 亚洲无线一线二线三线区别av| 久久久综合香蕉尹人综合网 | 日本精品一区二区三区在线播放视频 | 麻豆av一区二区三区| 国产亚洲精品资源在线26u| 最好看的2019的中文字幕视频| 在线观看国产精品视频| 一区二区三区四区国产精品| 91视频啊啊啊| 精品亚洲国产成人av制服丝袜| 裸体在线国模精品偷拍| 国产欧美日韩综合一区在线观看| 亚洲欧洲国产综合| 中文字幕高清不卡| 麻豆久久久9性大片| 2021av在线| 精品国产3级a| 国产精品久久久久久69| 日韩欧美在线播放| 欧美被狂躁喷白浆精品| 国产欧美日韩另类一区| 国产原创剧情av| 精品一区二区三区免费观看| 欧洲黄色一级视频| 欧美成人久久| 亚洲一区二区三区欧美| 欧美18免费视频| 91手机在线观看| 国产第一精品| 日本一欧美一欧美一亚洲视频| 色婷婷视频在线观看| 色噜噜狠狠狠综合曰曰曰| 欧美在线一卡| 亚洲国产第一页| 性猛交xxxx乱大交孕妇印度| 欧美日韩一区二区三区不卡| 中文字幕在线欧美| 舔着乳尖日韩一区| 久久久久无码国产精品| 18欧美亚洲精品| 在线免费看视频| 国产日韩欧美精品一区| 在线观看国产免费视频| 成人小视频在线观看| 久久精品一卡二卡| 久久99蜜桃精品| 伊人影院综合在线| 日产欧产美韩系列久久99| 18岁网站在线观看| 亚洲三级网站| 欧美视频免费看欧美视频| 可以免费看av的网址| 日产亚洲一区二区三区| www.超碰在线| 亚洲福利小视频| 亚洲美女福利视频| 欧美精品久久天天躁| 看黄色一级大片| 色八戒一区二区三区| 在线观看日本视频| 一本一道久久a久久精品蜜桃| 国产精品91一区| 欧洲av一区二区| 国产精品99久久久久久人| 欲香欲色天天天综合和网| 欧美影院在线播放| 欧美成人h版| 国产精品成久久久久三级| 素人一区二区三区| 国产精品自拍视频| 国产日韩欧美中文在线| 亚洲最大激情中文字幕| 欧美日韩黄网站| 国产一区二区免费电影| 日韩极品在线| 日韩久久精品一区二区三区| 大胆日韩av| 日本丰满少妇黄大片在线观看| 欧美在线播放| 精品久久久久久久久久中文字幕| 亚洲在线日韩| 天堂在线资源视频| 黄页视频在线91| 911亚洲精选| 久久久亚洲精品石原莉奈| 亚洲午夜精品久久久久久高潮| 中文字幕一区二区三区在线播放 | 国产精品久久久久久久久动漫 | 午夜精品免费| 成人免费在线小视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲欧美aaa| 成人性生交大合| 日本二区在线观看| 亚洲女子a中天字幕| 五月天综合激情| 欧美日韩国产高清一区| www.久久成人| 亚洲欧美另类在线观看| 精品视频在线一区二区| 欧美猛少妇色xxxxx| 最新欧美色图| 91日本在线视频| 一道本一区二区三区| 国产美女视频免费| 久久久久91| 真实乱偷全部视频| 久久久久久99精品| 精国产品一区二区三区a片| 欧美性高跟鞋xxxxhd| 99国产精品久久久久久久成人| 亚洲韩国欧洲国产日产av| 爱久久·www| 久久久亚洲网站| 国产精久久一区二区| 欧美激情论坛| 精品99视频| www.久久av.com| 久久欧美中文字幕| 久久久久久激情| 欧美美女视频在线观看| 涩涩视频在线观看免费| 欧美成年人网站| 成人久久网站| 久久久影院一区二区三区 | 国产精品视频免费看| 日产电影一区二区三区| 欧美一级午夜免费电影| jizzjizz在线观看| 91av在线影院| 91精品国产自产在线丝袜啪| 中文字幕免费在线不卡| 蜜桃视频一区| 成人网站免费观看| 亚洲高清免费观看 | 久久天堂影院| 日韩av在线电影观看| av成人激情| 丰满人妻一区二区三区免费视频棣| 国产精品女同一区二区三区| 中文字幕精品无码一区二区| 欧美精品一区二区三区四区| 色呦呦在线观看视频| 91在线视频九色| 91tv精品福利国产在线观看| 无需播放器的av| 国产女人18毛片水真多成人如厕| 中文字幕视频网站| 亚洲精品在线91| 345成人影院| 欧美日韩大片一区二区三区| 激情五月***国产精品| 美女伦理水蜜桃4| 亚洲国产中文字幕| 亚洲爱爱综合网| 欧美大片免费观看| 人人爱人人干婷婷丁香亚洲| 免费看黄色a级片| 国产成人在线影院| 久久久久久久福利| 精品成人一区二区三区| 俺来俺也去www色在线观看| 国产精品一区二区欧美黑人喷潮水| 黄色亚洲大片免费在线观看| 国产无套精品一区二区三区| 亚洲五码中文字幕| 日韩中文字幕影院| 97久久久久久| 国产成人三级| www.日本一区| 亚洲日本成人在线观看| 超碰在线观看99| 97色在线视频观看| 国产精品美女久久久久久不卡 | 99热这里有精品| 国产制服91一区二区三区制服| 国产一区二区三区四区五区入口| 日韩影院一区二区| 亚洲精品一区二区三区精华液| 美女的胸无遮挡在线观看| 欧美一区二区福利| 久久av老司机精品网站导航| 欧美激情图片小说| 亚洲国产三级网| 亚洲第一会所001| 欧美精品一区二区性色a+v| 成人午夜电影网站| 五月天激情国产综合婷婷婷| 中文字幕亚洲自拍| 狂野欧美xxxx韩国少妇| 欧美 丝袜 自拍 制服 另类| 久久精品无码一区二区三区| 一级全黄少妇性色生活片| 欧美第一页在线| 视频国产一区| 日本55丰满熟妇厨房伦| 婷婷国产在线综合| 永久免费在线观看视频| 成人18视频| 日韩高清不卡在线| 久久久精品视频在线| 亚洲视频日韩精品| 精品一区二区三区中文字幕| 美女av免费在线观看| 中文字幕一区二区三区av| 日本精品久久久久久| 国产精品美女呻吟| 黑人一区二区| chinese全程对白| 亚洲精品久久久久久下一站| 欧美成人三级| 91视频 -- 69xx| 亚洲精品中文在线观看| 国产一二在线观看| 国产91亚洲精品一区二区三区|