RestTemplate には以下の 2 つのタイムアウトを設定することができます。
ConnectTimeout
ReadTimeout
これらの設定自体は SimpleClientHttpRequestFactory クラスが持っているのですが、RestTemplate のコンストラクタで SimpleClientHttpRequestFactory を渡して設定します。
1 2 3 4 5 6 7 | RestTemplate( SimpleClientHttpRequestFactory() .apply { setConnectTimeout(1000) setReadTimeout(3000) } ) |
今回は単純に、接続先の処理が遅くてレスポンス時間に余裕が持ちたい場合について調べてみました。
それぞれのタイムアウトについて
この 2 種類の設定、「接続タイムアウト」と「読み込みタイムアウト」ということで、どのような挙動になるのかわかりにくいです。
setConnectTimeout()
Set the underlying URLConnection’s connect timeout (in milliseconds). A timeout value of 0 specifies an infinite timeout.
setReadTimeout()
Set the underlying URLConnection’s read timeout (in milliseconds). A timeout value of 0 specifies an infinite timeout.
要は、接続先の処理が遅くてレスポンスが返るまでに時間がかかる場合、どちらのタイムアウト設定を長くすればいいかという話です。
じっくり考えればわかることですが、最初はコネクションだから setConnectTimeout() の方だろうと安易に解釈したのですが、挙動を確認してみたところ setReadTimeout() が正解でしたね。
設定はミリ秒になるので、例えばタイムアウトを 3 秒にしたい場合は、冒頭のサンプルの通り setReadTimeout() に 3000 を設定しておきます。