首页 > 解决方案 > 在 Spring Boot 中设置 tomcat connectionUploadTimeout

问题描述

我想尝试在 Spring Boot 2 中设置 Tomcat connectionUploadTimeoutjava.net.SocketTimeoutException: null属性。我在服务器日志中得到一些随机的不可重现的内容。

它来自请求输入流,所以如果我可以将此属性设置为非常短的持续时间,那么我应该能够在本地复制它。

我试过了

server.disableUploadTimeout=false
server.connectionUploadTimeout=5000

server.tomcat.disableUploadTimeout=false
server.tomcat.connectionUploadTimeout=5000

server.tomcat.disable-upload-timeout=false
server.tomcat.connection-upload-timeout=5000

但我在本地的 15 秒请求仍在完成,没有任何超时。

Spring 文档在这里不是很有帮助。

标签: javaspring-boottomcat

解决方案


无需猜测支持哪些属性,因为它们都列在参考文档的附录中。如您所见,没有用于配置连接上传超时或启用上传超时的属性Connector。这意味着必须以编程方式配置这些属性。

您可以Connector使用特定于 Tomcat 的方式以编程方式配置WebServerFactoryCustomizer

@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
    return (tomcat) -> tomcat.addConnectorCustomizers((connector) -> {
        if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
            AbstractHttp11Protocol<?> protocolHandler = (AbstractHttp11Protocol<?>) connector
                    .getProtocolHandler();
            protocolHandler.setDisableUploadTimeout(false);
            protocolHandler.setConnectionUploadTimeout(5000);
        }
    });
}

推荐阅读