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

如何将Spring嵌入式Tomcat的HTTP连接器从Nio切换为APR?

当然可以切换嵌入式Tomcat的HTTP Connector为APR!

你说得没错,APR连接器在高并发场景下性能确实比默认的NIO更优,而且完全可以在Spring Boot(你用STS开发Spring REST API应该是基于Spring Boot的吧?)的嵌入式Tomcat里配置使用,不用非得打包成WAR部署到外部Tomcat。下面是具体的实现步骤:

1. 添加APR相关依赖

首先需要在你的项目中引入Tomcat APR的嵌入式依赖,以Maven为例,在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-apr</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-websocket-apr</artifactId>
</dependency>

如果是Gradle项目,对应的依赖配置是:

implementation 'org.apache.tomcat.embed:tomcat-embed-apr'
implementation 'org.apache.tomcat.embed:tomcat-embed-websocket-apr'

这些依赖会自动引入APR运行所需的核心库,包括平台相关的native组件(比如Linux下的libtcnative-1.so、Windows下的tcnative-1.dll)。

2. 自定义Tomcat配置,启用APR Connector

接下来需要创建一个配置类,自定义Tomcat的ServletWebServerFactory,替换默认的NIO Connector为APR Connector。代码示例如下:

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatAprConfig {

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatAprCustomizer() {
        return factory -> {
            // 直接替换默认的Connector为APR类型
            factory.setTomcatConnectorCustomizers(connector -> {
                connector.setProtocol("org.apache.coyote.http11.Http11AprProtocol");
            });
            // 如果你想保留默认NIO同时新增一个APR端口,也可以用下面的方式:
            // Connector aprConnector = new Connector("org.apache.coyote.http11.Http11AprProtocol");
            // aprConnector.setPort(8081);
            // factory.addAdditionalTomcatConnectors(aprConnector);
        };
    }
}

根据你的需求选择配置方式即可,通常推荐直接替换默认Connector,这样所有请求都会走APR协议。

3. 验证APR是否生效

启动你的Spring Boot应用后,查看控制台日志,如果看到类似下面的日志,说明APR Connector已经成功启用:

INFO  [main] o.a.coyote.http11.Http11AprProtocol: Starting ProtocolHandler ["http-apr-8080"]

这就证明嵌入式Tomcat现在已经在使用APR连接器处理请求了。

注意事项

  • Linux环境下:确保系统已安装基础依赖(比如apr-devel、openssl-devel),不过大多数情况下,依赖中的native组件已经足够,无需额外手动安装。
  • Windows环境下:Spring Boot会自动从依赖包中加载tcnative-1.dll,不需要手动将文件放到系统路径。

内容的提问来源于stack exchange,提问作者Yunus Emre Güler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:11:05