栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring-server.connection-timeout不起作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring-server.connection-timeout不起作用

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以编程方式进行配置。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/615647.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号