自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

實(shí)戰(zhàn)案例

事務(wù)超時配置

當(dāng) API 接口涉及數(shù)據(jù)庫事務(wù)時,可以通過 @Transactional 注解的 timeout 參數(shù)來限制事務(wù)執(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 的超時保護(hù)

Resilience4j 提供 TimeLimiter 模塊,實(shí)現(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 三種方式進(jìn)行 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 中添加以下內(nèi)容:

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

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

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

總結(jié)

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

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

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2025-02-12 08:47:07

SpringAPI接口

2009-06-19 18:26:38

Spring事務(wù)配置

2011-02-28 13:51:30

Spring事物配置

2011-11-25 10:25:27

SpringJava

2022-08-18 09:38:02

Spring跨域

2025-04-16 10:03:40

開發(fā)Spring應(yīng)用程序

2018-05-30 15:10:24

Spring BootList類型

2024-05-30 08:51:28

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

2024-10-15 16:41:35

2025-01-03 16:27:35

SpringBoot代碼打包

2021-12-31 13:40:43

Spring Boot熱部署Java

2023-11-01 15:07:51

環(huán)境配置方式

2013-05-23 09:49:28

虛擬化桌面虛擬化

2012-09-05 15:45:18

Ntbackup備份

2013-05-23 09:45:10

虛擬化桌面虛擬化

2010-08-13 13:25:53

Flex頁面跳轉(zhuǎn)

2016-12-07 10:02:54

移動應(yīng)用開發(fā)底部導(dǎo)航android

2025-02-27 00:10:19

2025-03-31 08:39:55

2025-04-30 08:39:33

SpringMVC接口
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號