Java
spring
RestTemplate

Spring RestTemplate Config Timeout設定

Spring RedisTemplate でタイムアウトを期待して2000msec 設定しているけど効かずに処理が滞留することがある
設定追加でクリアできるか確認中、だめなら自力でタイムアウト...

・設定済
setConnectionRequestTimeout:10000msec
setReadTimeout:2000msec

・追加?
setConnectionRequestTimeout
→ 時間が足らずに検証できず

・自力タイムアウトの方法
今回は Async(Spring @Async 使用のメソッド)だったので return を Future にして対応
RetryTemplate も使用して以下の感じで対応

RetryTemplate
RetryTemplate retryTemplate = new RetryTemplate();

Map<Class<? extends Throwable>, Boolean> exceptions = Maps.newHashMap();
exceptions.put(TimeoutException.class, true);
retryTemplate.setRetryPolicy(new SimpleRetryPolicy(10, exceptions));

FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
backOffPolicy.setBackOffPeriod(10);
retryTemplate.setBackOffPolicy(backOffPolicy);
Future(getResult)
Future<T> future = async.execute();
T result = retryTemplate.execute(new RetryCallback<T, TimeoutException>() { 
    @Override
    public T doWithRetry(RetryContext context) throws TimeoutException {
        if (future.isDone()) {
            return future.get();
        }
        throw new TimeoutException();
    }
});

※実際は InterruptedException, ExecutionException とかExceptionは適切に catch して処理

参考
・API
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.html