提问人:user3857331 提问时间:10/24/2023 最后编辑:user3857331 更新时间:10/24/2023 访问量:98
Spring Boot 连接超时
Spring boot connection timed out
问:
我在 Spring Boot 方法中等待了 5 秒钟,但出现连接超时异常。
@PostMapping(value="/api/stt", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity endPoint(@RequestBody String payload) throws Exception {
...
int delay = 5000;
long start = System.currentTimeMillis();
while(start >= System.currentTimeMillis() - delay);
...
}
java.net.ConnectException: Connection timed out: connect
at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na]
at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na]
at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) ~[na:na]
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na]
at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na]
at net.schmizz.sshj.SocketClient.connect(SocketClient.java:126) ~[sshj-0.27.0.jar:0.27.0]`
我已经尝试了 wait 和 Thread.sleep 以及 TimeUnit.SECONDS.sleep(5);当我使用 postman 发帖时,我在 Intellij 中毫无例外地收到“错误:套接字挂起”。
任何帮助将不胜感激 Postman 屏幕截图
答:
0赞
higz555
10/24/2023
#1
在 REST API 中实现手动等待从来都不是一个好主意。如果这是您正在等待的资源,则应改为轮询。
但无论如何,会返回相当多的数字。
示例:1426349294842System.currentTimeMillis()
该请求超时,因为根据上述逻辑,该请求被迭代了 2 亿次以上。while
如果您确实需要等待使用TaskScheduler
taskScheduler.schedule(
() -> {
// logic to implement after time elapses
},
new Date(OffsetDateTime.now().plusSeconds(5).toInstant().toEpochMilli())
);
评论
0赞
user3857331
10/24/2023
您好,感谢您的回答。有没有办法在Spring Boot中配置超时,以便Thread.sleep(5000)工作?
0赞
higz555
10/24/2023
Thread.sleep 应该可以工作。原始问题中的错误看起来更像是 Postman 方面的问题,而不是您的应用程序。使用屏幕截图更新问题以响应邮递员请求
0赞
user3857331
10/24/2023
我相信这是应用程序端的问题,线程在 Thread.sleep(5000) 之后被中断,因为之后的断点从未到达。我添加了请求的屏幕截图。再次感谢,我尝试为您的答案投票,但我没有足够的“声誉”
0赞
higz555
10/24/2023
尝试在 postman 的下拉列表中选择 JSON 而不是文本
0赞
user3857331
10/24/2023
做到了,还是“得不到回应”
0赞
user3857331
10/24/2023
#2
问题是我使用 file.createNewFile() 在目标目录中创建了一个文件,并且 intellij 自动重新加载会重新启动应用程序,因为类路径中的新文件会在 Thread.sleep(5000) 提供足够的时间时切断连接。
评论