Spring|Spring Boot如何配置内置Tomcat的maxPostSize值
目录
- Spring Boot配置内置Tomcat的maxPostSize值
- Background
- Problem 1
- Problem 2
- Tomcat设置maxPostSize导致Post请求不过去
- 问题
- 排查问题
- 分析
Spring Boot配置内置Tomcat的maxPostSize值
Background
前端页面表单输入数据较多,包含多个文本、多张图片,在数据未压缩的情况下,最终上传失败。
Problem 1
后端报错:
【Spring|Spring Boot如何配置内置Tomcat的maxPostSize值】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
:
server:tomcat:max-http-post-size: -1
Note: 以下配置并不能解决Tomcat请求数据量的限制问题
spring:servlet:multipart:max-file-size: 30Mbmax-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
:
USE demo; set global max_allowed_packet = 3*1024*1024*10; # 改为30Mshow 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 大小需要将值设置为 -1。
在此版本之前设置为 0 表示不限制 POST 大小。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 如何寻找情感问答App的分析切入点
- Activiti(一)SpringBoot2集成Activiti6
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- java中如何实现重建二叉树