如何 - Spring IoC和HttpClient 4.3.1 CloseableHttpClient?

 诗人不失神 发布于 2023-02-13 12:37

我想让Spring IoC配置一个CloseableHttpClient对象并将其注入我的类中,以便可以通过XML完成其配置的自定义.

从我所看到的,HttpClient似乎非常强烈地抵制这种模式.他们希望你做的事情

CloseableHttpClient chc =
    HttpClients.custom().set().build();

伊克.

是否有一些制作单例CloseableHttpClientbean的机制我可以使用?

2 个回答
  • 使用Java配置,这很简单

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

    使用XML配置,它有点复杂.您可以创建自己的FactoryBean实现,例如CloseableHttpClientFactoryBean,将所有调用委托给a HttpClientBuilderbuild()内部调用getObject().

    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>
    

    2023-02-13 12:41 回答
  • 这似乎对我有用:

    <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"bean中的CloseableHttpClient,配置了套接字和连接超时.您应该能够向requestConfigBuilder或httpClientBuilder添加更多属性.

    2023-02-13 12:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有