Spring Boot 连接超时

Spring boot connection timed out

提问人:user3857331 提问时间:10/24/2023 最后编辑:user3857331 更新时间:10/24/2023 访问量:98

问:

我在 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 屏幕截图

java spring-boot 等待 睡眠

评论


答:

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) 提供足够的时间时切断连接。

评论

0赞 Community 10/25/2023
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。