繁体   English   中英

如何为嵌入在我的 spring-boot 应用程序中的 Web 服务器(Tomcat)配置低级套接字属性?

[英]How to configure low-level socket properties for a web server (Tomcat) embedded in my spring-boot application?

如何为 spring-boot 嵌入式 Web 服务器配置低级选项(在我的具体情况下,我使用的是 Tomcat)?

例如,我想将SO_REUSEADDR设置为 true。

这个答案是 Tomcat 特定的

事实证明,这可以通过TomcatConnectorCustomizer bean 实现,例如

@Bean
public TomcatConnectorCustomizer tomcatConnectorCustomizer() {
    return connector -> connector.setProperty("socket.soReuseAddress", "true");
}

它是如何工作的?

connector.setProperty使用IntrospectionUtils.setProperty实现,它查找具有匹配名称的 bean 属性,如果失败,则在连接器的ProtocolHandler使用getProperty方法

在我的例子中,ProtocolHandler 是org.apache.coyote.http11.Http11NioProtocol ,它在其超类org.apache.coyote.AbstractProtocol中有一个setProperty ,最终调用org.apache.tomcat.util.net.AbstractEndpointsetProperty .

然后该方法将属性与socket. 分开来。 前缀,并再次反射性地将其匹配到org.apache.tomcat.util.net.SocketProperties访问器(在我们的例子中为 setSoReuseAddress )。

最后,当创建套接字时,在配置新套接字时使用存储的配置


还应该注意(同样,这是 Tomcat 特定的)Tomcat 也使用 JVM 默认值( 链接)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM