SpringBoot

Rest 클라이언트 커스터마이징

Jungsoomin :) 2020. 11. 8. 19:31

WebClient

  • Reactor Netty 의 HTTP 사용
  • 지역 설정 : 체인 메서드
  • 전역 설정 : RestTemplateCustomizer 빈 생성
@Component
public class NoneBlockingRestRunner implements ApplicationRunner {

    @Autowired
    private WebClient.Builder builder;
    @Override
    public void run(ApplicationArguments args) throws Exception {

        WebClient webClient = builder.baseUrl("http://localhost:8080").build();

        StopWatch stopWatch = new StopWatch();
        stopWatch.start();

        // stream api
        Mono<String> helloMono = webClient.get().uri("/hello").retrieve().bodyToMono(String.class);
        // stream 동작
        helloMono.subscribe( s -> {
            System.out.println(s);
            if(stopWatch.isRunning()) {
                stopWatch.stop();
            }

            System.out.println(stopWatch.prettyPrint());
            stopWatch.start();
        } );

        Mono<String> worldMono = webClient.get().uri("/world").retrieve().bodyToMono(String.class);
        worldMono.subscribe( f -> {
            System.out.println(f);
            if(stopWatch.isRunning()) {
                stopWatch.stop();
            }

            System.out.println(stopWatch.prettyPrint());
        });
    }
}
// 전역설정 시 모든 빌더는 해당 설정으로 만들어진다.
    @Bean
    public WebClientCustomizer webClientCustomizer(){
        return  new WebClientCustomizer() {
            @Override
            public void customize(WebClient.Builder webClientBuilder) {
                webClientBuilder.baseUrl("http://localhost:8080");
            }
        };
//        return builder -> { builder.baseUrl("http://localhost:8080");};
    }

RestTemplate

  • apache http 클라이언트를 사용해야할 경우가 자주 발생
  • HttpClient 가 빈으로 등록되야함
<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
</dependency>
@Bean
    public RestTemplateCustomizer restTemplateCustomizer(){
        return new RestTemplateCustomizer() {
            @Override
            public void customize(RestTemplate restTemplate) {
                // 아파치 http 클라이언트 사용
                restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
            }
        };

    }

 

'SpringBoot' 카테고리의 다른 글

JMX, Http  (0) 2020.11.08
Spring Boot Acutator  (0) 2020.11.08
RestTemplate / WebClient  (0) 2020.11.08
MongoDB  (0) 2020.11.08
데이터베이스마이그레이션  (0) 2020.11.08