精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

9i看片成人免费看片| 看一级黄色录像| 国产一区二区三区影院| а天堂8中文最新版在线官网| 99热精品在线| 亚洲精品按摩视频| 妞干网这里只有精品| 精品免费久久久| 夜夜嗨一区二区| 日本道免费精品一区二区三区| 国产日韩在线一区二区三区| 国产精品一区二区三区四| 精品欧美久久| 欧美一区二区三区在线视频| 久久手机在线视频| 精品成人av一区二区在线播放| 自拍偷拍精品| 色偷偷成人一区二区三区91| 椎名由奈jux491在线播放| 丰满少妇高潮在线观看| 老司机久久99久久精品播放免费| 国产亚洲a∨片在线观看| 丰满少妇在线观看| 日韩av激情| 麻豆国产一区二区| 久久久久久国产精品三级玉女聊斋| 中文视频在线观看| 手机在线观看av| 欧美国产欧美亚州国产日韩mv天天看完整| 91九色单男在线观看| 国产无套内射又大又猛又粗又爽 | 中文字幕第一区综合| 国产又爽又黄的激情精品视频| 精品无码黑人又粗又大又长| 色婷婷综合网| 欧美精选一区二区| 欧美 日韩 国产 高清| 欧美黄色小说| 国产在线视视频有精品| 欧美专区中文字幕| 国产一级片网址| 91免费精品| 亚洲精品国产免费| 中文写幕一区二区三区免费观成熟| 欧美亚洲大片| 夜夜爽夜夜爽精品视频| 欧美美乳视频网站在线观看| 999久久久久| 国产欧美不卡| 欧美激情视频给我| 在线看的片片片免费| 国产欧美高清视频在线| 亚洲精品大尺度| 91人人澡人人爽| 777午夜精品电影免费看| 精品久久久久久中文字幕大豆网| 咪咪色在线视频| 免费国产羞羞网站视频| 狠狠色综合日日| 国产美女久久精品| 在线精品免费视| 一道本一区二区| 欧美国产日韩在线| 国产主播av在线| 国产乱码精品一区二区三区四区| 日韩视频国产视频| 99草草国产熟女视频在线| 高清电影在线观看免费| 伊人色综合久久天天| 国产精品视频一区二区三区不卡| 99re视频在线播放| 久久视频免费看| 围产精品久久久久久久| 亚洲午夜av电影| 久久久久无码精品国产sm果冻| 国产精品视屏| 日韩情涩欧美日韩视频| 亚洲36d大奶网| 狂野欧美性猛交xxxx| 日韩欧美aaa| 国产免费一区二区三区视频| 国产精品迅雷| 欧美日韩国产在线| 一女被多男玩喷潮视频| 三级网站免费观看| 99免费精品视频| 国产伦精品一区| 人人妻人人澡人人爽人人欧美一区| 成人综合在线观看| 国产精品99导航| 久久久久久久久久久影院| 久久亚洲风情| 久久精品国产欧美激情| 国产日产在线观看| 欧美日中文字幕| www.久久久久久.com| 亚洲精品电影院| 色777狠狠狠综合伊人| 中文字幕最新精品| 在线免费黄色小视频| 日韩三级精品| 亚洲精品大尺度| 日本wwww色| 第四色中文综合网| 亚洲欧洲视频在线| 欧美88888| 国产精品chinese| 97久久久久久| 成人免费一区二区三区| 国产精品2024| 欧美日韩一区在线观看视频| 九九九在线观看| 欧美国产三区| 欧美中在线观看| 一区二区 亚洲| av中文一区二区三区| 日韩激情视频| 色黄网站在线观看| 91黄色免费观看| 日韩人妻无码精品久久久不卡| 三妻四妾完整版在线观看电视剧 | 手机在线免费看片| 国产精品日韩久久久| 成人黄色免费网站在线观看| 国内老熟妇对白hdxxxx| 久久精品欧美一区二区三区麻豆| 欧美一区三区三区高中清蜜桃| 欧美 亚洲 另类 激情 另类| 国产高清不卡一区| 国产精品久久久久久免费观看| 九色视频在线观看免费播放| 亚洲六月丁香色婷婷综合久久 | aaa黄色大片| 狠狠综合久久av一区二区蜜桃| 最近中文字幕日韩精品| 色婷婷av国产精品| 激情综合五月天| 国产一区二区不卡视频在线观看| 日韩国产亚洲欧美| youjizz久久| 亚洲一区二区在线免费观看| 日韩影院在线| 欧美性猛片xxxx免费看久爱| 艳妇乳肉豪妇荡乳xxx| 亚洲欧美偷拍自拍| 国产成人精品午夜| 国产极品久久久| 国产精品伦理一区二区| 青草视频在线观看视频| 日本免费一区二区三区视频| 亚洲第一区中文99精品| 天天操天天干天天操天天干| 亚洲伦理精品| 粉嫩精品一区二区三区在线观看 | 国产乱人伦偷精品视频不卡 | 91黑人精品一区二区三区| 不卡高清视频专区| 日韩欧美猛交xxxxx无码| 青娱乐极品盛宴一区二区| 亚洲韩国欧洲国产日产av| 欧美成人综合色| 国产九色精品成人porny| 色一情一乱一伦一区二区三欧美| 欲香欲色天天天综合和网| 黄色在线小视频| 综合中文字幕亚洲| 在线观看免费av网址| 欧美精品系列| 欧美亚洲视频在线观看| 天天干,夜夜爽| 欧美日韩精品在线| 爱爱的免费视频| 99亚洲一区二区| 精品视频在线观看| 瑟瑟视频在线看| 精品一区二区三区四区在线| 色网站在线播放| 久久一夜天堂av一区二区三区| 黄色网页免费在线观看| 青青久久av| 国产成人97精品免费看片| 国产高清在线看| 欧美在线免费播放| 国产精品久久久久久成人| 日本sm残虐另类| 中文字幕一区二区三区四区五区人| 999精品视频在线观看| 久久久国产视频91| 国产高中女学生第一次| 亚洲欧美日韩国产中文在线| 国产调教打屁股xxxx网站| 亚洲精品精选| 日韩精品资源| 成人动漫视频在线观看| 欧美激情第6页| 视频在线不卡| 欧美中文字幕亚洲一区二区va在线 | 国产精品久久久久久户外露出| 亚洲色精品三区二区一区| 四季av在线一区二区三区| 成人女人免费毛片| av高清一区| 久久久精品视频在线观看| 国产综合视频在线| 欧美视频中文字幕在线| av电影网站在线观看| 日日夜夜一区二区| 欧美日韩一级在线| 色婷婷av一区二区三区丝袜美腿| 国产精品欧美日韩久久| 欧美bbbxxxxx| 亚洲欧美日韩网| 99久久免费国产精精品| 亚洲国产免费看| 亚洲欧美三级伦理| 国产老妇伦国产熟女老妇视频| 午夜精品久久久久久久99水蜜桃| 欧美黄色高清视频| av亚洲精华国产精华| 国产无遮挡猛进猛出免费软件| 中出一区二区| 日韩高清av电影| 国产精品18hdxxxⅹ在线| 国产精品爽爽爽爽爽爽在线观看| 免费在线播放电影| 一本色道久久综合狠狠躁篇的优点 | 91麻豆精品激情在线观看最新 | 国产精品久久夜| 国产女人18毛片水真多18| 美女在线视频一区| 国产h视频在线播放| 欧美电影免费播放| 久久久久网址| theporn国产在线精品| 日本中文字幕不卡免费| 国产盗摄一区二区| 欧美不卡视频一区发布| av女优在线| 亚洲欧美日韩中文视频| 九九九免费视频| 国产精品嫩草影院av蜜臀| www.超碰97| 国产aⅴ精品一区二区三区色成熟| 亚州精品一二三区| 国产日韩亚洲欧美精品| 男同互操gay射视频在线看| 九九在线精品| 蜜桃传媒视频麻豆一区| 丁香花在线观看完整版电影| 精品国产一区二区三区久久狼黑人| 青草久久伊人| 亚洲成人黄色网| 国产精品无码在线播放| 欧美日韩综合在线| 欧美激情一区二区三区免费观看| 天天综合色天天综合| 欧美日韩黄色网| 欧美韩国日本综合| 少妇av片在线观看| 国产精品视频看| 欧洲性xxxx| 亚洲国产精品99久久久久久久久| 亚洲第一成人网站| 欧美一区二区| 青青草免费在线视频观看| 成人激情免费视频| 老司机av福利| 99精品在线观看| 亚州欧美一区三区三区在线| 欧美日韩国产一区二区三区不卡| 欧美大香线蕉线伊人久久国产精品| 羞羞色国产精品网站| 成人在线观看91| 国产无遮挡裸体免费久久| 久久理论片午夜琪琪电影网| 黄色成人在线网| 69影院欧美专区视频| 国产在线天堂www网在线观看| 午夜精品久久久久久久久久久久久 | 不卡的在线视频| 五月综合激情| 伊人久久在线观看| 在线成人欧美| 水蜜桃色314在线观看| 国产日韩欧美高清免费| 国产最新免费视频| 秋霞电影网一区二区| 污污的视频免费观看| 国产一区二区精品在线观看| 免费看黄在线看| 亚洲第一毛片| 成年人免费大片| 久久精品国产秦先生| 想看黄色一级片| 成人av网站在线| 99自拍视频在线| 色综合久久精品| 性生交大片免费看女人按摩| 欧美视频在线不卡| 精品人妻少妇AV无码专区| 亚洲无亚洲人成网站77777| 欧美黑人猛交的在线视频| 国产精品久久久久久久久免费| avtt综合网| 一区二区视频国产| 亚洲中字在线| 26uuu国产| 中文字幕中文字幕在线一区 | 精品欧美日韩在线| 亚洲综合色网| 亚洲成人av免费看| 97se亚洲国产综合自在线不卡| 日本福利片在线观看| 91黄色免费看| 天堂在线观看av| 欧美日本国产在线| 亚洲国产天堂| 日本视频一区在线观看| 在线亚洲欧美| 国产人妻精品午夜福利免费| 国产精品久久久久影院老司| 三级网站在线播放| 亚洲国产精品久久91精品| 九色porny丨首页在线| 日韩av手机在线观看| 色哟哟精品丝袜一区二区| 成人短视频在线观看免费| 极品美女销魂一区二区三区免费| 亚洲av无码国产精品麻豆天美| 午夜激情一区二区三区| 亚洲精品无码专区| 欧美成在线视频| 国产精品igao视频网网址不卡日韩| 日韩精品欧美一区二区三区| 久久三级福利| 人人妻人人澡人人爽人人精品| 亚洲成a天堂v人片| 亚洲精品成人电影| 久久久久久伊人| 亚洲经典视频| 欧美黄网在线观看| 国产成人免费网站| 麻豆成人在线视频| 精品美女一区二区| 日本高清成人vr专区| 2019国产精品视频| 欧美三级第一页| 欧美xxxxx少妇| 五月天亚洲精品| 青青国产在线| 国产精品第三页| 色琪琪久久se色| 日韩成人av免费| 一区二区高清免费观看影视大全| aaa一区二区三区| 欧美激情精品久久久久久大尺度| 999精品视频在这里| 好吊妞无缓冲视频观看| 久久亚洲一区二区三区四区| 精品不卡一区二区| 中文字幕欧美专区| 久久久久毛片免费观看| 污污污污污污www网站免费| 成人毛片视频在线观看| 五月激情六月丁香| 一区二区三区国产视频| 日韩av黄色| 黄色一级大片免费| 99久久精品费精品国产一区二区| 日韩毛片一区二区三区| 永久免费精品影视网站| 午夜不卡一区| 2019日韩中文字幕mv| 久久久亚洲精品石原莉奈| 中国一级特黄视频| 欧美另类高清videos| 婷婷综合成人| 一二三级黄色片| 午夜在线电影亚洲一区| 国产毛片av在线| 99中文字幕| 日韩中文字幕不卡| 免费视频网站www| 亚洲欧洲在线视频| 成人激情久久| 精品久久一二三| 中文字幕一区视频| 蜜桃av中文字幕| 国产精品自拍网| 亚洲伦理一区| 糖心vlog免费在线观看| 日韩激情在线视频| 亚洲91在线| 国产精品333| 亚洲欧洲制服丝袜| 久草视频在线看| 国产精品久久久久久久久久久久冷| 男女性色大片免费观看一区二区 | 亚欧洲乱码视频| 日韩手机在线导航|