Spring BootのRestTemplateでタイムアウトを設定する方法

こんにちは、さるまりんです。

Spring BootアプリケーションのRestTemplateでタイムアウトを設定する必要(?)があったのでやってみました。

設定はRestTemplateのconfig(設定)でClientHttpRequestFactoryに対して行います。

こんなコードになります。

RestTemplateConfig.java

@Configuration
public class RestTemplateConfig {

    @Value("${connect-timeout:1000}")
    private int connectTimeout;

    @Value("${request-timeout:2000}")
    private int requestTimeout;

    @Value("${read-timeout:1000}")
    private int readTimeout;

    @Bean
    public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(HttpClientBuilder.create().build());

        // ここで設定します

        // サーバーへの接続確率のタイムアウト
        clientHttpRequestFactory.setConnectTimeout(connectTimeout);

        // サーバーへリクエストを送ってレスポンスが返ってくるまでのタイムアウト
        clientHttpRequestFactory.setConnectionRequestTimeout(requestTimeout);

        // ソケットのタイムアウト(パケットの受信間隔のタイムアウト)
        clientHttpRequestFactory.setReadTimeout(readTimeout);

        return new RestTemplate(clientHttpRequestFactory);
    }

}

上のコードではデフォルト値で100020001000を設定しています。
プロパティファイルに

connect-timeout=5000
request-timeout=10000
read-timeout=5000

などとして、設定値を変えることができます。

デフォルトのままでもいいのかもしれないけど、「タイムアウト何秒だったっけ?」って聞かれて答えられなくて、ちょっと恥ずかしかったので、これからは設定できるようにしておきます。

参考になれば嬉しいです。

読んでくださってありがとうございます。

それではまた!