[英]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.AbstractEndpoint
的setProperty .
然后该方法将属性与socket.
分开来。 前缀,并再次反射性地将其匹配到org.apache.tomcat.util.net.SocketProperties
访问器(在我们的例子中为 setSoReuseAddress )。
最后,当创建套接字时,在配置新套接字时使用存储的配置。
还应该注意(同样,这是 Tomcat 特定的)Tomcat 也使用 JVM 默认值( 链接)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.