Вы создаете оформленного поставщика , который только ловит RuntimeExceptions
, тогда как ConnectException
не является RuntimeException
:
... decorateSupplier(Retry retry, Supplier<T> supplier) {
return () -> {
Retry.Context<T> context = retry.context();
do try {
...
} catch (RuntimeException runtimeException) {
...
Просмотрите Retry.java
и выберите тот, который ловит Exception
, например, decorateCheckedFunction
, например,
val registry =
RetryRegistry.of(RetryConfig.custom().maxAttempts(4).build())
val retry = registry.retry("my")
Retry.decorateCheckedFunction(retry, (x: Int) => {
println(s"woohoo $x")
throw new ConnectException("Test")
42
}).apply(1)
, который выдает
woohoo 1
woohoo 1
woohoo 1
woohoo 1
Exception in thread "main" java.rmi.ConnectException: Test
Лично я использую softwaremill / повтор