引入新的回调接口 TomcatProtocolHandlerCustomizer,可用于自定义 Tomcat 连接器上的 ProtocolHandler。
修复#15035
引入新的回调接口 TomcatProtocolHandlerCustomizer,可用于自定义 Tomcat 连接器上的 ProtocolHandler。
修复#15035
@pas2al 感谢您的公关。我可能遗漏了一些东西,但我没有看到新的定制器在TomcatServletWebServerFactory
和中的任何地方使用TomcatReactiveWebServerFactory
。例如,这里TomcatConnectorCustomizer
使用 s 。
你能详细说明一下吗?
一旦在和tomcatProtocolHandlerCustomizers
上设置了,就需要为每一个调用。该测试目前将失败,因为连接器的协议处理程序不会调用自定义:TomcatServletWebServerFactory
TomcatReactiveWebServerFactory
customize
TomcatServletWebServerFactory factory = getFactory();
factory.addProtocolHandlerCustomizers(
(TomcatProtocolHandlerCustomizer) protocolHandler -> protocolHandler.setThreadPriority(23));
Tomcat tomcat = getTomcat(factory);
Connector connector = ((TomcatWebServer) this.webServer).getServiceConnectors()
.get(tomcat.getService())[0];
AbstractProtocol protocolHandler = (AbstractProtocol) connector.getProtocolHandler();
assertThat(protocolHandler.getThreadPriority()).isEqualTo(23);
@mbhave 好的,这是有道理的。我错过了,抱歉!那么我应该这样称呼customize
每个人吗?ProtocolHandlerCustomizer
for (TomcatProtocolHandlerCustomizer customizer : this.tomcatProtocolHandlerCustomizers) {
customizer.customize((AbstractProtocol<?>) connector.getProtocolHandler());
}
该方法是执行此操作的好地方吗customizeConnector
(您将其固定在上面的评论中)?
我就这样尝试了一下,并通过测试证实了这一点。我只是想澄清我走在正确的轨道上。
@pas2al 是的,customizeConnector
将是一个很好的地方。我也不认为我们需要强迫定制者采取AbstractProtocol
.我们可以只自TomcatProtocolHandlerCustomizer
定义 a ProtocolHandler
。它看起来像这样:
void customize(ProtocolHandler protocolHandler);
好的,感谢您的反馈!关于ProtocolHandler
.在#15035中,描述建议将其定制为如下所示:
@Bean
public TomcatProtocolHandlerCustomizer<AbstractHttp11Protocol<?>> processorCacheCustomizer() {
return (handler) -> handler.setProcessorCache(250);
}
因此,将类型传递给TomcatProtocolHandlerCustomizer
仍然是可行的方法,还是我们自定义一个ProtocolHandler
?但是上面的 Bean 示例将不起作用。
抱歉,你是对的。我的意思是我们可以更改通用以期望ProtocolHandler
.
public interface TomcatProtocolHandlerCustomizer<T extends ProtocolHandler> {
这样我们就不需要AbstractProtocol
在调用时将其转换为 an customize
。
TomcatProtocolHandlerCustomizer
好的,我应该输入这样的用法<TomcatProtocolHandlerCustomizer<ProtocolHandler>>
吗?例如,对于 中的用法TomcatServletWebServerFactory
,或者您还有其他建议吗?
我认为,如果您可以使用此处提到的更改来更新 PR ,并循环调用customize
每个定制器,我们就可以处理合并时丢失的任何内容。
我更新了 PR。
@pas2al 感谢您对 Spring Boot 做出的第一个贡献。现在它与这个波兰提交一起合并到 master 中。
@mbhave 非常感谢您的机会和支持!