こんにちは、さるまりんです。
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);
}
}
上のコードではデフォルト値で1000
、2000
、1000
を設定しています。
プロパティファイルに
connect-timeout=5000
request-timeout=10000
read-timeout=5000
などとして、設定値を変えることができます。
デフォルトのままでもいいのかもしれないけど、「タイムアウト何秒だったっけ?」って聞かれて答えられなくて、ちょっと恥ずかしかったので、これからは設定できるようにしておきます。
参考になれば嬉しいです。
読んでくださってありがとうございます。
それではまた!