Spring Boot如何配置内置Tomcat的maxPostSize值
spring boot配置内置tomcat的maxpostsize值
background
前端页面表单输入数据较多,包含多个文本、多张图片,在数据未压缩的情况下,最终上传失败。
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 大小需要将值设置为 -1。
在此版本之前设置为 0 表示不限制 post 大小。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
SpringBoot 源码解析 (六)----- Spring Boot的核心能力 - 内置Servlet容器源码分析(Tomcat)
-
Spring boot如何快速的配置多个Redis数据源
-
如何更优雅地获取spring boot yml中的值
-
SpringBoot 源码解析 (六)----- Spring Boot的核心能力 - 内置Servlet容器源码分析(Tomcat)
-
Spring Boot如何配置内置Tomcat的maxPostSize值
-
Spring boot如何快速的配置多个Redis数据源
-
教你如何配置Spring Boot的properties文件
-
Spring如何获取配置在application.properties文件中属性的值?
-
结合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot
-
Spring Boot配置文件值的注入方式