refactor: RestTemplateConfig 통일

internalApi
박성영 1 month ago
parent ad07645bb6
commit d0cb4eefbd

@ -1,4 +1,4 @@
package egovframework.config;
package go.kr.project.api.config;
import com.google.common.util.concurrent.RateLimiter;
import egovframework.configProperties.RestTemplateProperties;

@ -11,7 +11,6 @@ import go.kr.project.api.model.request.LedgerRequest;
import go.kr.project.api.model.response.LedgerResponse;
import go.kr.project.api.internal.util.TxIdUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.client.HttpStatusCodeException;
@ -63,7 +62,7 @@ import java.nio.charset.StandardCharsets;
public class GovernmentApiClient implements GovernmentApi {
/**
* Spring RestTemplate (VMIS API )
* Spring RestTemplate ( RestTemplate )
*
* <p>HTTP .
* Spring Bean , :</p>
@ -71,11 +70,11 @@ public class GovernmentApiClient implements GovernmentApi {
* <li>Connection Timeout </li>
* <li>Read Timeout </li>
* <li>Connection Pool </li>
* <li>Rate Limiting ( )</li>
* <li> (Jackson for JSON)</li>
* <li> (, )</li>
* </ul>
*/
@Qualifier("vmisRestTemplate")
private final RestTemplate restTemplate;
/**

@ -1,39 +0,0 @@
package go.kr.project.api.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
*
*
* <p> .
* Spring @Value application.yml .</p>
*/
@Component
public class Globals {
/**
* (: mariadb, oracle, mysql )
*
* <p>MyBatis Mapper XML .
* mapper-locations: classpath:mybatis/mapper/**\/*_${Globals.DbType}.xml</p>
*
* <p>:
* <ul>
* <li>DbType = "mariadb" user_mariadb.xml </li>
* <li>DbType = "oracle" user_oracle.xml </li>
* </ul>
* </p>
*/
public static String DbType;
/**
* application.yml Globals.DbType .
*
* @param dbType (: mariadb)
*/
@Value("${Globals.DbType:mariadb}")
public void setDbType(String dbType) {
Globals.DbType = dbType;
}
}

@ -1,53 +0,0 @@
package go.kr.project.api.config;
import go.kr.project.api.config.properties.VmisProperties;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
/**
* HttpClient
* Apache HttpClient 4 RestTemplate
* VMIS API RestTemplate (vmisRestTemplate)
*/
@Configuration
public class HttpClientConfig {
@Bean(name = "vmisRestTemplate")
public RestTemplate vmisRestTemplate(VmisProperties props, RestTemplateBuilder builder) {
VmisProperties.GovProps gov = props.getGov();
int connectTimeout = gov.getConnectTimeoutMillis();
int readTimeout = gov.getReadTimeoutMillis();
// HttpClient 4 방식의 RequestConfig
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(connectTimeout)
.setSocketTimeout(readTimeout)
.setConnectionRequestTimeout(connectTimeout)
.build();
// 커넥션 풀 설정
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(100);
cm.setDefaultMaxPerRoute(20);
// HttpClient 생성
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(cm)
.build();
// RestTemplate에 HttpClient 적용
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
return builder
.requestFactory(() -> requestFactory)
.build();
}
}
Loading…
Cancel
Save