Spring boot 连接超时

问题描述 投票:0回答:1

我在 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);当我用邮递员发帖时,我得到“错误:套接字挂起”,在 Intellij 中没有任何异常。

如有任何帮助,我们将不胜感激

java spring-boot wait sleep
1个回答
0
投票

在 REST API 中实现手动等待绝不是一个好主意。如果这是您正在等待的资源,您应该进行轮询。

但无论如何,

System.currentTimeMillis()
会返回相当大的数字。 示例:1426349294842

根据上述逻辑,由于

while
被迭代超过 2 亿次,因此请求超时。

如果您确实需要等待,请使用

TaskScheduler

taskScheduler.schedule(
    () -> {
      // logic to implement after time elapses
    }, 
    new Date(OffsetDateTime.now().plusSeconds(5).toInstant().toEpochMilli())
);
© www.soinside.com 2019 - 2024. All rights reserved.