spring-boot - spring-boot app的keep-alive配置
问题描述
我正在尝试修复/调试使用嵌入式 tomcat 的 spring-boot Web 应用程序中关闭连接过多的问题。出现问题是因为它关闭了应该保持活动状态的连接。
现在,我发现 tomcat 具有限制保持连接数量的配置(请参阅https://tomcat.apache.org/tomcat-8.5-doc/config/http.htmlmaxKeepAliveRequests
) ,并且可能还有其他配置可以与问题有关。但我的问题是我看不到这些参数在哪里给出,或者如果使用默认值,我如何更改它们。
我的问题:我在哪里可以找到解释如何配置 spring-boot/embedded-tomcat keep-alive 参数的文档,这些参数是哪些?
解决方案
并非所有的 tomcat 属性都可以通过属性文件进行配置。相关属性是这些keep-alive
属性之一,这意味着它们只能以编程方式配置。这是通过配置WebServerFactoryCustomizer
bean 来完成的。您可以使用协议处理程序来设置KeepAlive
设置。下面的一个例子:
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
return (tomcat) -> tomcat.addConnectorCustomizers((connector) -> {
if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
AbstractHttp11Protocol<?> protocolHandler = (AbstractHttp11Protocol<?>) connector
.getProtocolHandler();
protocolHandler.setKeepAliveTimeout(80000);
protocolHandler.setMaxKeepAliveRequests(500);
protocolHandler.setUseKeepAliveResponseHeader(true);
}
});
}
要了解有关这些设置的更多信息,请阅读tomcat 9 配置参考
推荐阅读
- spring - 我需要帮助使用 Spring、Junit 5、Mockito、REST-Assured 和 Lombok 设置控制器测试
- gdb - GDB 没有采用放置在 ~/.gdbint 和/或 ~/.gdbrc 文件中的指令
- kubernetes - 如何将启用 SSL 的 Cassandra 集群配置为 cassandra-reaper 的后端存储?
- javascript - 在Angular 8中具有多个选择的复选框内包含内容的自定义复选框
- c# - 找不到类型或命名空间名称“PeterO”
- java - 了解java中的通用上限通配符
- mapping - Cloudformation 参数映射和使用 !join 加入 API Gateway uri
- javascript - 覆盖现有动画
- sql - 将枢轴上的计数转换为位/标志?
- reactjs - 这个例子中的 currCount 是从哪里来的?