You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Spring Boot达到最大线程/连接数后立即拒绝请求

Spring Boot内嵌Tomcat实现请求立即拒绝(无排队)

问题原因

你配置的server.tomcat.accept-count、max-threads、max-connections未生效的核心原因:

  • Tomcat默认线程池使用LinkedBlockingQueue(默认容量无限),即使线程数达到上限,请求仍会被放入队列等待,不会触发拒绝
  • accept-count是操作系统监听队列的长度,默认值不为0时,超出Tomcat处理能力的请求会被操作系统暂存,而非直接拒绝

解决方案

1. 修正application.properties配置

必须将accept-count设为0,同时明确线程和连接数限制:

server.tomcat.max-threads=1
server.tomcat.max-connections=1
server.tomcat.accept-count=0
  • accept-count=0:操作系统不会缓存超出Tomcat处理能力的请求,直接拒绝
  • max-threads=1:限制Tomcat工作线程数为1
  • max-connections=1:限制同时处理的连接数为1

2. 自定义Tomcat线程池队列与拒绝策略

仅靠配置文件无法修改线程池的队列类型,需通过Java配置替换为无容量的SynchronousQueue,确保线程满时立即拒绝请求:

import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.SynchronousQueue;

@Configuration
public class TomcatRejectConfig {

    @Bean
    public ServletWebServerFactory tomcatServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((Connector connector) -> {
            ThreadPoolExecutor executor = (ThreadPoolExecutor) connector.getProtocolHandler().getExecutor();
            if (executor != null) {
                // 替换为同步队列:无内部容量,必须有空闲线程才能提交任务
                executor.setQueue(new SynchronousQueue<>());
                // 显式设置拒绝策略:直接抛出异常,Tomcat转为HTTP 503响应
                executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
            }
        });
        return factory;
    }
}

验证效果

并发发送请求时,超出限制的请求会立即收到HTTP 503 Service Unavailable响应,不会进入队列等待。

内容的提问来源于stack exchange,提问作者Khalid Muaydh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:08:11