Spring Boot如何配置内置Tomcat的maxPostSize值

网友投稿 1115 2022-12-13

Spring Boot如何配置内置Tomcat的maxPostSize值

Spring Boot如何配置内置Tomcat的maxPostSize值

目录Spring Boot配置内置Tomcat的maxPostSize值BackgroundProblem 1Problem 2Tomcat设置maxPostSize导致Post请求不过去问题排查问题分析

Spring Boot配置内置Tomcat的maxPostSize值

BacvsavqAvuVTkground

前端页面表单输入数据较多,包含多个文本、多张图片,在数据未压缩的情况下,最终上传失败。

Problem 1

后端报错:

java.lang.IllegalStateException: The multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector

即:请求数据量过大,超出了最大阈值。

Solution:

修改Spring Boot内置Tomcat的maxPostsize值,在application.yml配置文件中添加以下内容:

server:

tomcat:

max-http-post-size: -1

Note: 以下配置并不能解决Tomcat请求数据量的限制问题

spring:

servlet:

multipart:

max-file-size: 30Mb

max-request-size: 100Mb

Problem 2

解决了应用服务器请求数据量过大问题后,在下一步写入DB时又遇到了类似问题,超出了数据库中最大允许数据包默认配置值。

Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (16800061 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable.

Solution:

修改DB的max_allowed_packet值:

USE demo;

set global max_allowed_packet = 3*1024*1024*10; # 改为30M

show VARIABLES like '%max_allowed_packet%'; # 重启DB连接生效

Note:MySQL中max_allowed_packet 的 默认配置:16777216 = 16 * 1024 * 1024,即16M

Tomcat设置maxPostSize导致Post请求不过去

问题

最近部署项目,用到的Tomcat 版本:7.0.82.0,发现一直登陆不了,查询发现原来前端的数据传递不到后端

排查问题

通过debug日志发现,后端没有接受到前端用户的登陆数据,检查发现Tomcat在server.xml中加入了,maxPostSize=0这个参数,先删除这个参数发现数据过去了

分析

查询了表示maxPostSize=0表示post请求不限制大小的,google了半天才发现,原来从 apache-tomcat-7.0.63 开始,参数 maxPostSize 的含义就变了: 如果将值设置为 0,表示 POST 最大值为 0,不限制 POST 大小需要将值设置为 -1http://。

在此版本之前设置为 0 表示不限制 POST 大小。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:BeanUtils.copyProperties()参数的赋值顺序说明
下一篇:SpringBoot实现分页功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~