成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot API 超時配置全解析:五種實現(xiàn)方式詳解

開發(fā) 前端
本篇文章介紹了 Spring Boot 3.4 中 5 種 API 超時配置方案,包括事務超時、Resilience4j 超時保護、異步超時、HTTP 客戶端超時以及 NGINX 代理超時配置。

在開發(fā) API 接口時,合理配置 API 超時時間是保證系統(tǒng)穩(wěn)定性和高效性的關鍵。當服務器因數(shù)據(jù)庫查詢緩慢或外部接口響應延遲等問題導致請求無法及時返回時,合理的超時設置可以防止系統(tǒng)資源被長時間占用,進而避免系統(tǒng)崩潰或性能下降。

Spring Boot 提供了多種方式來實現(xiàn) API 超時控制,針對不同的應用場景,選擇合適的策略至關重要。本文基于 Spring Boot 3.4,介紹以下五種 API 超時配置方案:

  • 事務超時配置用于數(shù)據(jù)庫操作超時控制。
  • 基于 Resilience4j 的超時保護實現(xiàn)接口級別的超時控制。
  • 異步請求超時對異步調用進行超時控制。
  • HTTP Client 超時配置包括 RestTemplate、RestClient 和 WebClient。
  • 基于 NGINX 代理超時在 NGINX 層面配置超時策略。

實戰(zhàn)案例

事務超時配置

當 API 接口涉及數(shù)據(jù)庫事務時,可以通過 @Transactional 注解的 timeout 參數(shù)來限制事務執(zhí)行時間。例如:

package com.icoderoad.service;


import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.concurrent.TimeUnit;


@Service
public class UserService {


    @Transactional(timeout = 1)
    public List<User> queryUsers() {
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return userRepository.findAll();
    }
}

此外,可以通過全局異常處理器捕獲超時異常:

@ExceptionHandler(TransactionTimedOutException.class)
public ResponseEntity<String> handleTxTimeout(TransactionTimedOutException ex) {
    return ResponseEntity.status(HttpStatus.REQUEST_TIMEOUT).body("請求超時: " + ex.getMessage());
}

基于 Resilience4j 的超時保護

Resilience4j 提供 TimeLimiter 模塊,實現(xiàn)超時控制。

引入依賴

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

配置超時策略

@TimeLimiter(name = "queryUser", fallbackMethod = "fallbackQuery")
@GetMapping("/query")
public CompletionStage<ResponseEntity<String>> query() {
    return CompletableFuture.supplyAsync(() -> {
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return ResponseEntity.ok("success");
    });
}


public CompletionStage<ResponseEntity<String>> fallbackQuery(Throwable e) {
    return CompletableFuture.completedStage(ResponseEntity.ok("請求超時,降級處理: " + e.getMessage()));
}

配置文件

resilience4j:
  timelimiter:
    instances:
      queryUser:
        timeout-duration: 1s

異步請求超時

Spring Boot 支持通過配置 request-timeout 來控制異步請求的超時時間。

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

異步接口示例:

@GetMapping("/async")
public Callable<String> asyncRequest() {
    return () -> {
        TimeUnit.SECONDS.sleep(10);
        return "異步請求成功";
    };
}

HTTP Client 超時配置

Spring Boot 提供 RestTemplate、RestClient 和 WebClient 三種方式進行 HTTP 請求。

RestTemplate 配置

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder
        .setConnectTimeout(Duration.ofSeconds(1))
        .setReadTimeout(Duration.ofSeconds(1))
        .build();
}

RestClient 配置

@Bean
public RestClient restClient() {
    return RestClient.builder()
        .setConnectTimeout(Duration.ofSeconds(1))
        .setReadTimeout(Duration.ofSeconds(1))
        .build();
}

WebClient 配置

@Bean
public 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();
}

基于 NGINX 代理超時配置

在 NGINX 配置文件 nginx.conf 中添加以下內容:

location /api/ {
    proxy_pass http://127.0.0.1:8080;
    proxy_connect_timeout 1s;
    proxy_send_timeout 1s;
    proxy_read_timeout 1s;
}

當超時發(fā)生時,可在 NGINX 日志中查看錯誤:

[error] 11172#27080: *1 upstream timed out (10060: A connection attempt failed)

總結

本篇文章介紹了 Spring Boot 3.4 中 5 種 API 超時配置方案,包括事務超時、Resilience4j 超時保護、異步超時、HTTP 客戶端超時以及 NGINX 代理超時配置。合理選擇不同的超時控制方案,可以有效提升 API 的穩(wěn)定性,防止因長時間阻塞導致系統(tǒng)資源占用過多,從而提升整體服務的可靠性和用戶體驗。

希望本文能幫助你更好地理解和配置 API 超時策略!

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-02-12 08:47:07

SpringAPI接口

2011-11-25 10:25:27

SpringJava

2009-06-19 18:26:38

Spring事務配置

2011-02-28 13:51:30

Spring事物配置

2025-06-06 08:28:56

2022-08-18 09:38:02

Spring跨域

2025-04-16 10:03:40

開發(fā)Spring應用程序

2025-05-07 08:25:02

Android場景驗證碼

2018-05-30 15:10:24

Spring BootList類型

2024-05-30 08:51:28

Spring數(shù)據(jù)分布式

2024-10-15 16:41:35

2025-06-12 02:00:00

Spring簽到打卡

2025-06-04 02:10:00

2021-12-31 13:40:43

Spring Boot熱部署Java

2025-01-03 16:27:35

SpringBoot代碼打包

2013-05-23 09:45:10

虛擬化桌面虛擬化

2012-09-05 15:45:18

Ntbackup備份

2023-11-01 15:07:51

環(huán)境配置方式

2013-05-23 09:49:28

虛擬化桌面虛擬化

2010-08-13 13:25:53

Flex頁面跳轉
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美国产日韩在线观看成人 | 综合精品| 狠狠操天天干 | 在线色网站 | 国产精品久久久久久中文字 | 视频第一区 | 九九亚洲 | 日韩专区中文字幕 | 伊人中文字幕 | 日日干日日操 | 天天综合天天 | 国产伦精品一区二区三区精品视频 | av中文在线| 欧美精品一区二区在线观看 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 天堂中文在线观看 | 欧美一级黄视频 | 国产精品久久二区 | 国产一区二区三区色淫影院 | 91精品国产一区二区三区 | 久久精品国产99国产精品亚洲 | 三级在线观看 | 91色综合| 日日噜噜噜夜夜爽爽狠狠视频97 | 毛片毛片毛片毛片毛片 | 免费在线观看h片 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 91九色在线观看 | 久久久久久高潮国产精品视 | 亚洲国产精品久久人人爱 | 老头搡老女人毛片视频在线看 | 特黄毛片 | 紧缚调教一区二区三区视频 | 精产国产伦理一二三区 | 欧洲成人午夜免费大片 | 在线日韩| 综合色播| 午夜av一区二区 | 亚洲一区二区三区在线播放 | 黄色av网站在线观看 |