728x90
반응형
커스터마이징
RestTemplate와 WebClient의 HttpTemplate
RestTemplate
java.net.HttpURLConnection
사용
WebClient
Reactor Netty
의 HTTP 클라이언트 사용
로컬 커스터마이징
WebClient baseUrl
적용
// RestRunner.java
@Component
public class RestRunner implements ApplicationRunner {
@Autowired
WebClient.Builder builder;
@Override
public void run(ApplicationArguments args) throws Exception {
WebClient webClient = builder.baseUrl("http://localhost:8080").build(); // baseUrl 적용
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Mono<String> helloMono = webClient.get().uri("/hello").retrieve().bodyToMono(String.class);
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(s -> {
System.out.println(s);
if(stopWatch.isRunning()) {
stopWatch.stop();
}
System.out.println(stopWatch.prettyPrint());
stopWatch.start();
});
}
}
결과
baseUrl
설정 시 WebClient.Uri()
에 호출Url
만 입력할 수 있다.
글로벌 커스터마이징
1. WebClientCustomizer 이용 baseUrl 설정하기
// Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// WebClientCustomizer Bean 등록
@Bean
public WebClientCustomizer webClientCustomizer() {
return new WebClientCustomizer(){
@Override
public void customize(Builder webClientBuilder) {
webClientBuilder.baseUrl("http://localhost:8080"); // baseUrl 설정
}
};
}
}
// RestRunner.java
@Component
public class RestRunner implements ApplicationRunner {
@Autowired
WebClient.Builder builder;
@Override
public void run(ApplicationArguments args) throws Exception {
WebClient webClient = builder.build(); // baseUrl 설정 제거
...
}
}
결과
baseUrl
설정 시 WebClient.Uri()
에 호출Url
만 입력할 수 있다.
2. RestTemplateCustomizer 이용 Apach Http Client로 변경하기
(1) 의존성 추가
// pom.xml
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
(2) Application
클래스 수정
// Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public RestTemplateCustomizer restTemplateCustomizer() {
return new RestTemplateCustomizer(){
@Override
public void customize(RestTemplate restTemplate) {
// 각각 원하는 구현체에 맞는 Adaptor 형식의 RequestFactory가 있다.
// Spring PSA(Portable Service Abstraction)가 잘 적용되어 있다.
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
}
};
}
}
결과
RestTemplate
는 Java
에 있는 기본 HttpConnection
대신 Apache
에서 제공하는 HttpClient
를 사용한다.
728x90
반응형
'Dev > Spring Boot' 카테고리의 다른 글
[스프링 부트 개념과 활용] 스프링 부트 Actuator 1부 (0) | 2020.09.03 |
---|---|
[스프링 부트 개념과 활용] 그 밖에 다양한 기술 연동 (0) | 2020.09.03 |
[스프링 부트 개념과 활용] 스프링 REST 클라이언트 1부 (0) | 2020.09.03 |
[스프링 부트 개념과 활용] 스프링 시큐리티 2부 (0) | 2020.08.31 |
[스프링 부트 개념과 활용] 스프링 시큐리티 1부 (0) | 2020.08.31 |
댓글