Spring Bootのアプリケーションで複数のRestTemplateを使う

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

Spring bootのアプリケーションでAPIを呼び出す際にRestTemplateを使っています。

複数のエンドポイントへのアクセスするのに違う設定でアクセスするために、複数のRestTemplateで使い分けたいことがあります。

その時はこんなふうにします。

まずは設定です。
commonとspecialの二つのRestTemplateを用意しています。

@Configuration
public class RestTemplateConfig {
  @Bean(name = "commonRestTemplate")
  @Primary
  public RestTemplate commonRestTemplate(RestTemplateBuilder builder) {
    // ここでこのRestTemplateのための設定を色々行います
    return builder().build();
  }

  @Bean(name = "specialRestTemplate")
  public RestTemplate specialRestTemplate(RestTemplateBuilder builder) {
    // ここでもう一つのRestTemplateのための設定を行います
    return builder().build();
  }
}

としておいて、サービス内ではこんなふうにします。

@Service
public class MySomeService {

  @Autowired
  RestTemplate commonRestTemplate;

  @Autowired
  @Qualifier("specialRestTemplate")
  private RestTemplate specialRestTemplate;

  // サービスの実装が続きます
}

設定では認証の違いやタイムアウトの設定の違いなどがあります。
必要に応じていろんな使い方ができそうです。

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

それではまた!