Ожидание от maven
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
await().atMost(Duration.TEN_SECONDS)
.pollInterval(Duration.ONE_HUNDRED_MILLISECONDS)
.until(()-> My Rest Call with response);
Мне нужен способ, если истечет время ожидания, не будет выдано исключение (не знаю, выдает ли он ex после истечения времени ожидания), вместо этого верните null или верните ответ, если он существует. И я хочу избежать повторного вызова, если ответ не пуст в течение интервала времени ожидания (если это возможно).
Не знаю, почему я нахожу это сложным. :-)
вы можете просто обернуть свой вызов с помощью попытки поймать и обработать тайм-ауты. Awaitility не предназначена для удовлетворения таких потребностей.
Вы можете просто использовать java.util.concurrent
для того, что вы описали, не нужно ждать:
private Object invokeWithTimeout() {
ExecutorService execService = Executors.newSingleThreadExecutor();
Callable<Object> runWithTimeout = this::doYourThing; // Or your Lambda
Future<Object> result = execService.submit(runWithTimeout);
try {
return result.get(10, TimeUnit.SECONDS); //Set your Timeout here
} catch (TimeoutException | InterruptedException | ExecutionException e) {
result.cancel(true);
return null;
}
}
Это вернет результат из doYourThing()
или ноль, если истекло время ожидания или произошло другое исключение.
Почти подходит. Чего я не вижу в вашем ответе, так это интервала вытягивания (что-то вроде свободного ожидания). Но завтра попробую это решение, надеюсь
Проверьте эту часть документации, чтобы узнать, поможет ли она: github.com/awaitility/awaitility/wiki/…