Tomcat 8.5/Spring MVC异步处理超时控制主体及配置属性咨询
嘿,这个问题我刚好有过实际排查的经验,咱们来理清楚:
超时控制的核心角色:Tomcat
首先明确:你遇到的这个20秒阈值限制,是由Tomcat控制的,Spring MVC默认并没有全局的同步请求处理超时机制。
对应的Tomcat配置属性
在Tomcat 8.5中,控制这个超时的关键属性是connectionTimeout,它配置在Tomcat安装目录下conf/server.xml的<Connector>标签里,默认值是20000毫秒(也就是刚好20秒)。这个属性的作用是限制Tomcat等待请求完整处理完成(包括你的控制器方法执行时间)的最大时长——一旦超过这个时间,Tomcat会直接中断连接,这就导致你的30秒、60秒延迟方法还没执行完就被终止,进而出现500响应和异常日志;而20秒延迟刚好卡在阈值内,所以能正常返回结果。
关于Spring MVC的补充说明
如果你想要在Spring MVC层面单独控制请求超时(比如给不同接口设置不同超时),可以通过以下方式,但这属于额外配置,并非默认行为:
- 对于异步请求,可以配置
RequestMappingHandlerAdapter的asyncRequestTimeout属性; - 对同步方法,可以结合
@Async注解和线程池的超时配置来实现,但这需要你手动改造代码逻辑。
内容的提问来源于stack exchange,提问作者John Donn
相关产品推荐
相关产品推荐

