首页 > 解决方案 > Spring RestTemplate.exchange 卡住了

问题描述

我有一个使用 Spring RestTemplate 的应用程序。有时,它会卡住(上次,它卡住了 2 天,然后我们才注意到并重新启动它):

"scheduling-1" #19 prio=5 os_prio=0 tid=0x00007fbcfdfc0800 nid=0x36 runnable [0x00007fbc901c7000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    - locked <0x00000000c4ae36d0> (a java.io.BufferedInputStream)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:735)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1593)
    - locked <0x00000000c4aecc88> (a sun.net.www.protocol.http.HttpURLConnection)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
    - locked <0x00000000c4aecc88> (a sun.net.www.protocol.http.HttpURLConnection)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
    at org.springframework.http.client.SimpleClientHttpResponse.getRawStatusCode(SimpleClientHttpResponse.java:55)
    at org.springframework.web.client.DefaultResponseErrorHandler.hasError(DefaultResponseErrorHandler.java:55)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:765)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:735)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:669)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:578)

我使用 restTemplateBuilder.build() 构建 RestTemplate。

我会假设 RestTemplate 有某种默认的超时配置来在一段时间后断开连接,但它并没有断开它,所以我认为连接处于某种奇怪的状态。我能否以某种方式配置 RestTemplate 以在一段时间后断开连接,即使它认为连接正常?

标签: javaspringresttemplate

解决方案


推荐阅读