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

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

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

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

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

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

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

事務(wù)超時(shí)配置

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

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

此外,可以通過(guò)全局異常處理器捕獲超時(shí)異常:

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

基于 Resilience4j 的超時(shí)保護(hù)

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

引入依賴

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

配置超時(shí)策略

@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("請(qǐng)求超時(shí),降級(jí)處理: " + e.getMessage()));
}

配置文件

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

異步請(qǐng)求超時(shí)

Spring Boot 支持通過(guò)配置 request-timeout 來(lái)控制異步請(qǐng)求的超時(shí)時(shí)間。

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

異步接口示例:

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

HTTP Client 超時(shí)配置

Spring Boot 提供 RestTemplate、RestClient 和 WebClient 三種方式進(jìn)行 HTTP 請(qǐng)求。

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 代理超時(shí)配置

在 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)超時(shí)發(fā)生時(shí),可在 NGINX 日志中查看錯(cuò)誤:

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

總結(jié)

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

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

責(zé)任編輯:武曉燕 來(lái)源: 路條編程
相關(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

2025-06-06 08:28:56

2022-08-18 09:38:02

Spring跨域

2025-04-16 10:03:40

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

2025-05-07 08:25:02

Android場(chǎng)景驗(yàn)證碼

2024-05-30 08:51:28

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

2018-05-30 15:10:24

Spring BootList類型

2024-10-15 16:41:35

2025-06-04 02:10:00

2025-06-12 02:00:00

Spring簽到打卡

2025-01-03 16:27:35

SpringBoot代碼打包

2021-12-31 13:40:43

Spring Boot熱部署Java

2025-06-27 07:46:53

2023-11-01 15:07:51

環(huán)境配置方式

2013-05-23 09:49:28

虛擬化桌面虛擬化

2025-06-30 01:45:00

2013-05-23 09:45:10

虛擬化桌面虛擬化
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 亚洲综合资源 | 91久久婷婷 | 国产区在线免费观看 | 欧美日韩一区二区在线播放 | 在线日韩视频 | 国内精品伊人久久久久网站 | 久久综合一区 | 亚洲一区精品在线 | 特黄毛片 | 99re在线| 久久婷婷av | 日韩在线免费播放 | 午夜91 | 免费在线国产视频 | 亚洲网址在线观看 | 成人免费一区二区三区牛牛 | 国产一区二区三区视频免费观看 | 欧美大片一区 | 欧美精品一区二区三区在线播放 | 欧美精品一区在线观看 | 日韩一区二区在线视频 | 久久久蜜臀国产一区二区 | 日韩一区二区三区在线 | 精品久久久久久亚洲综合网 | 国产一区二区三区免费 | 免费在线观看黄网站 | 久久久久九九九九 | 成人一区在线观看 | 成人免费一区二区三区牛牛 | 曰韩三级 | 欧美一区二区三区的 | 日本黄色片免费在线观看 | 视频一区二区在线 | 国产在线观看 | 黄色在线观看国产 | 亚洲激情综合 | 久久久一二三区 | 亚洲成人免费视频在线 | 91日b| 剑来高清在线观看 | 欧美日韩视频在线第一区 |