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

问题描述 投票:0回答:4

我想为启动提供的 tomcat 设置 maxSwallowSize 属性。 我的 application.properties 有这一行:

server.context-parameters.maxSwallowSize=20971520 

由于某种原因不起作用。其他属性(例如 server.port)效果很好。 调试 TomcatEmbeddedServletContainerFactory 中的创建,我看到有一个 ServletContexInitializer (InitParameterConfiguringServletContextInitializer) 具有此属性,但它似乎没有以任何方式使用。 (尽管它是在变量名initializerToUse中,讽刺的是;p)

我不喜欢当上传超过

设置的最大大小时终止连接
multipart.max-request-size=10MB
multipart.max-file-size=2MB

这是设置该属性的正确方法吗?在调试过程中,我可以看到 IdentityInputFilter 的默认值为 2MB。

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

java spring spring-mvc tomcat spring-boot
4个回答
10
投票

server.context-parameters
(如文档中定义的可用于指定 servlet 上下文的 init 参数)。 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)

我发现解决办法是设置

应用程序属性:

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

并且所有上传都可以正常工作,无需配置 Tomcat。


2
投票
配置

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

因此,除了

spring.http.multipart 配置之外,您还应该为 maxSwallowSize 提供配置,这可以通过设置应用程序属性来简单地为 Spring Boot 2 完成: server.tomcat.max-swallow-size=100MB

在 application.properties 或 application.yml 中放置正确的配置对我来说就足够了。但在这篇文章中详细说明了配置名称取决于 Spring Boot 版本:

0
投票

就我而言,Spring Boot 2.0 之后:

spring.servlet.multipart.max-file-size=10MB

spring.servlet.multipart.max-request-size=11MB

© www.soinside.com 2019 - 2024. All rights reserved.