我在 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 中没有任何异常。
如有任何帮助,我们将不胜感激
在 REST API 中实现手动等待绝不是一个好主意。如果这是您正在等待的资源,您应该进行轮询。
但无论如何,
System.currentTimeMillis()
会返回相当大的数字。
示例:1426349294842
根据上述逻辑,由于
while
被迭代超过 2 亿次,因此请求超时。
如果您确实需要等待,请使用
TaskScheduler
taskScheduler.schedule(
() -> {
// logic to implement after time elapses
},
new Date(OffsetDateTime.now().plusSeconds(5).toInstant().toEpochMilli())
);