Spring-server.connection-timeout不起作用

在我的application.properties档案中,我有…

server.port=8086

server.connection-timeout=15000

我知道文件正在正确加载,因为服务器在端口8086上运行。

在应用程序中,我有一个 RestController

@RestController

class TestController {

@GetMapping()

fun getValues(): ResponseEntity<*> {

return someLongRunningProcessPossiblyHanging()

}

}

当我呼叫端点时,请求永远不会超时,只是无限期地挂起。

我想念什么吗?

我还被告知Tomcat在几分钟(而不是毫秒)内使用此字段(这是IMO的不寻常选择)。我尝试将其设置为server.connection-

timeout=1表示1分钟,但这也不起作用。

我不希望 另一个 HTTP请求导致先前的请求超时,我希望每个HTTP请求自行超时,如果时间过长无法处理该请求。

回答:

connection-timeout不适用于长时间运行的请求。当服务器等待客户端说些什么时,它确实适用于初始连接。

Tomcat文档(不是Spring Boot)将其定义为 :该连接器在接受连接之后将等待请求URI行出现的毫秒数[…]

要测试server.connection-timeout=4000我使用的连接设置,netcat并且不发送任何HTTP请求/标头。我得到:

$ time nc -vv localhost 1234

Connection to localhost 1234 port [tcp/*] succeeded!

real 0m4.015s

user 0m0.000s

sys 0m0.000s


从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-

请求超时?

另一个解决方案是使用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)

}

}

Tomcat有一个“

阻塞线程检测阀”,但我不知道是否可以使用Spring

Boot以编程方式进行配置。

以上是 Spring-server.connection-timeout不起作用 的全部内容, 来源链接: utcz.com/qa/436372.html

回到顶部