connection-timeout不适用于长时间运行的请求。当服务器等待客户端说些什么时,它确实适用于初始连接。
Tomcat文档(不是Spring Boot)将其定义为 :该连接器在接受连接之后将等待请求URI行出现的毫秒数[…]
要测试
server.connection-timeout=4000我使用的连接设置,
netcat并且不发送任何HTTP请求/标头。我得到:
$ time nc -vv localhost 1234Connection to localhost 1234 port [tcp/*] succeeded!real 0m4.015suser 0m0.000ssys 0m0.000s
备择方案
1)异步
从brightinventions.pl-Spring
MVC线程池超时:
在Spring MVC中,除非使用异步方法,否则无法配置超时。使用异步方法,可以使用spring.mvc.async.request-timeout
=设置异步请求处理超时之前的时间(以毫秒为单位)。
我已经设置,
spring.mvc.async.request-timeout=4000并且在浏览器中出现了超时:
@GetMapping("/test-async")public Callable<String> getFoobar() { return () -> { Thread.sleep(12000); //this will cause a timeout return "foobar"; };}请参阅Spring Boot REST API-
请求超时?
2)Servlet过滤器
另一个解决方案是使用servlet过滤器brightinventions.pl-Spring
MVC(Kotlin)中的请求超时:
override fun doFilterInternal(request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain) { val completed = AtomicBoolean(false) val requestHandlingThread = Thread.currentThread() val timeout = timeoutsPool.schedule({ if (completed.compareAndSet(false, true)) { requestHandlingThread.interrupt() } }, 5, TimeUnit.SECONDS) try { filterChain.doFilter(request, response) timeout.cancel(false) } finally { completed.set(true) }}3)雄猫卡死了螺纹检测阀?
Tomcat有一个“
阻塞线程检测阀”,但我不知道是否可以使用Spring
Boot以编程方式进行配置。



