使用Spring Boot应用程序属性设置Tomcat属性

3

我想为引导提供的Tomcat设置maxSwallowSize属性。 我的application.properties文件中有这一行:

server.context-parameters.maxSwallowSize=20971520 

因某些原因未能正常工作。像 server.port 这样的其他属性运行良好。 在 TomcatEmbeddedServletContainerFactory 中调试创建过程时,我发现有一个 ServletContexInitializer(InitParameterConfiguringServletContextInitializer)具有此属性,但似乎没有以任何方式使用它。(即使它在变量名 initializersToUse 中,这很讽刺 ;p)

我不喜欢当上传超过通过设置的最大大小时,杀死连接。

multipart.max-request-size=10MB
multipart.max-file-size=2MB

这是设置属性的正确方式吗?在调试期间,我可以看到IdentityInputFilter具有默认值2MB。

org.springframework.boot:spring-boot-starter-web的最新版本


抱歉,但是最新版本的spring-boot-starter-web一旦有更新版本发布,它就会变成旧版本了;-)请说明您的确切版本,这将使未来的读者更容易理解。(例如我,因为这个问题现在已经两年了) - Lars Gendner
3个回答

10

server.context-parameters(如文档中定义的那样)可用于指定servlet上下文的初始参数。 maxSwallowSize 是连接器的一个属性,我想那是另一回事。

我们没有针对它的显式属性,但您始终可以通过自己的TomcatEmbeddedServletContainerFactory进行配置。

@Bean
public TomcatEmbeddedServletContainerFactory containerFactory() {
    return new TomcatEmbeddedServletContainerFactory() {
        protected void customizeConnector(Connector connector) {
            super.customizeConnector(connector);
            if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
                (AbstractHttp11Protocol <?>) connector.getProtocolHandler()).setMaxSwallowSize(value);
            }
        }
    };

}

2

像上面那样的配置没有帮助到我(我正在使用Spring Boot 1.5.10)

我发现解决方案是设置

application.properties:

spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB

所有的上传都可以在不配置Tomcat的情况下正常进行。


1

配置 spring.http.multipart.max-request-size 不同于 maxSwallowSize。前者配置应用程序,后者配置Tomcat服务器。

因此,除了spring.http.multipart配置外,您还应该为maxSwallowSize提供配置。对于Spring Boot 2,可以通过设置应用程序属性来轻松完成:

server.tomcat.max-swallow-size=100MB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接