복붙노트

[SPRING] 방법 - Spring IoC 및 HttpClient 4.3.1 CloseableHttpClient?

SPRING

방법 - Spring IoC 및 HttpClient 4.3.1 CloseableHttpClient?

Spring IoC에서 CloseableHttpClient 객체를 구성하고이를 내 클래스에 삽입하여 XML을 통해 구성을 사용자 정의 할 수 있도록하고 싶습니다.

내가 볼 수 있듯이, HttpClient는이 패턴을 매우 강하게 저항하는 것으로 보입니다. 그들은 너 같은 일을하기 바래.

CloseableHttpClient chc =
    HttpClients.custom().set<thing that should be a property>().build();

Ick.

거기에 사용할 수있는 Singleton CloseableHttpClient 빈을 만들기위한 메커니즘이 없습니까?

해결법

  1. ==============================

    1.이것은 나를 위해 작동하는 것 :

    이것은 나를 위해 작동하는 것 :

    <bean id="requestConfigBuilder" class="org.apache.http.client.config.RequestConfig"
        factory-method="custom">
        <property name="socketTimeout" value="${socketTimeoutInMillis}" /> 
        <property name="connectTimeout" value="${connectionTimeoutInMillis}" /> 
    </bean>
    
    <bean id="requestConfig" factory-bean="requestConfigBuilder" factory-method="build" />
    
    <bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder"
        factory-method="create">
        <property name="defaultRequestConfig" ref="requestConfig" />
    </bean>
    
    <bean id="httpClient" factory-bean="httpClientBuilder" factory-method="build" />
    

    소켓과 연결 시간 초과가 구성된 "httpClient"빈에서 CloseableHttpClient를 제공합니다. requestConfigBuilder 또는 httpClientBuilder에 더 많은 특성을 추가 할 수 있어야합니다.

  2. ==============================

    2.Java 구성을 사용하면 다음과 같이 간단합니다.

    Java 구성을 사용하면 다음과 같이 간단합니다.

    @Bean
    public CloseableHttpClient httpClient() {
        HttpClientBuilder builder = HttpClientBuilder.create();
        builder.setEverything(everything); // configure it
        CloseableHttpClient httpClient = builder.build();
    }
    

    XML 설정을 사용하면 좀 더 복잡해집니다. 모든 호출을 HttpClientBuilder에 위임하고 getObject () 내에서 build ()를 호출하는 자체 FactoryBean 구현, 즉 CloseableHttpClientFactoryBean을 작성할 수 있습니다.

    public class CloseableHttpClientFactoryBean implements FactoryBean<CloseableHttpClient> {
        private HttpClientBuilder builder;
        public CloseableHttpClientFactoryBean() {
            builder = HttpClientBuilder.create();
        }
    
        ... // all the setters
        // for example
        public void setEverything(Everything everything) {
            // delegate
            builder.setEverything(everything);
        }
    
        public CloseableHttpClient getObject() {
            return builder.build();
        }
    }
    

    그리고 설정

    <bean name="httpClient" class="com.spring.http.clients.CloseableHttpClientFactoryBean">
        <property name="everything" ref="everything"/>
    </bean>
    

    각 HttpClientBuilder 메서드에 대한 setter 메서드가 필요합니다.

    사용자 정의 구성이 필요하지 않은 경우 factory-method를 사용하여 기본 CloseableHttpClient를 가져올 수 있습니다

    <bean name="httpClient" class="org.apache.http.impl.client.HttpClients" factory-method="createDefault" >
    </bean>
    
  3. from https://stackoverflow.com/questions/20340470/how-to-spring-ioc-and-httpclient-4-3-1-closeablehttpclient by cc-by-sa and MIT license