spring线程池,spring中http连接池

我们先配置线程池,比较简单

<bean id="taskExecutor"
            class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
            <property name="corePoolSize" value="10" />
            <property name="maxPoolSize" value="30" />
            <property name="keepAliveSeconds" value="300" />
            <property name="rejectedExecutionHandler">
            <bean class="java.util.concurrent.ThreadPoolExecutor$DiscardPolicy" />
            </property>
    </bean>

下面是http连接池的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 请求配置构建器 -->
    <bean id="requestConfigBuilder" class="org.apache.http.client.config.RequestConfig"
        factory-method="custom">
        <!-- 创建连接的最长时间 -->
        <property name="connectTimeout" value="20000" />
        <!-- 从连接池中获取到连接的最长时间 -->
        <property name="connectionRequestTimeout" value="10000" />
        <!-- 数据传输的最长时间 -->
        <property name="socketTimeout" value="60000" />
        <!-- 提交请求前测试连接是否可用 -->
        <property name="staleConnectionCheckEnabled" value="true" />
    </bean>

    <!-- 请求配置 -->
    <bean id="requestConfig" class="org.apache.http.client.config.RequestConfig"
        factory-bean="requestConfigBuilder" factory-method="build" />

    <!-- 连接管理器 -->
    <bean id="httpClientConnectionManager"
        class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager"
        destroy-method="close">
        <!-- 设置最大连接数 -->
        <property name="maxTotal" value="1000" />
        <!-- 设置每个主机的并发数 -->
        <property name="defaultMaxPerRoute" value="100" />
    </bean>

    <!-- 请求客户端构建器 -->
    <bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClients"
        factory-method="custom">
        <!-- 注入请求配置 -->
        <property name="defaultRequestConfig" ref="requestConfig" />
        <!-- 注入连接管理器 -->
        <property name="connectionManager" ref="httpClientConnectionManager" />
    </bean>

    <!-- 请求客户端 -->
    <bean id="httpClient" class="org.apache.http.impl.client.CloseableHttpClient"
        factory-bean="httpClientBuilder" factory-method="build"/>

    <!-- 定期清理无效连接 -->
    <bean class="com.rubbo.financial.service.third.IdleConnectionEvictor">
        <constructor-arg ref="httpClientConnectionManager" />
    </bean>

</beans>

import org.apache.http.conn.HttpClientConnectionManager;

/**
 * 
 * 定期清理无效连接线程
 * 
 */
public class IdleConnectionEvictor extends Thread
{
    /**
     * 连接管理器
     */
    private final HttpClientConnectionManager connectionManager;

    /**
     * 停止标志
     */
    private volatile boolean shutdown;

    /**
     * 构造方法
     *
     * @param connectionManager
     */
    public IdleConnectionEvictor(HttpClientConnectionManager connectionManager)
    {
        this.connectionManager = connectionManager;

        // 启动线程
        this.start();
    }

    @Override
    public void run()
    {
        try
        {
            while (!shutdown)
            {
                synchronized (this)
                {
                    // 每隔5秒执行检测关闭失效的连接
                    wait(5000);

                    // 关闭失效的连接
                    connectionManager.closeExpiredConnections();
                }
            }
        }
        catch (InterruptedException e)
        {
            // 结束
        }
    }

    /**
     * 
     * 停止方法
     * 
     * @return void
     */
    public void shutdown()
    {
        // 设置停止标志
        shutdown = true;

        synchronized (this)
        {
            notifyAll();
        }
    }
}
 

当然可以在进行封装成bean注入直接调用post,get

    @Autowired
    @Qualifier("taskExecutor")
    private TaskExecutor taskExecutor;

    @Autowired
    @Qualifier("httpClient")
    private HttpClient httpClient;

实例

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;

import com.bessky.financial.common.constant.SystemConstants;
import com.bessky.financial.pojo.pay.Pay;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;

/**
 * 
 * p卡供应商主体账号余额查询更新
 * 
 * @author 罗平
 * @version Bessky V100R001 2019年3月26日
 * @since Bessky V100R001C00
 */
@JobHandler(value = "createPayoneerToken")
@Component
public class CreatePayoneerTokenJobHandler2 extends IJobHandler
{

    @Autowired
    @Qualifier("taskExecutor")
    private TaskExecutor taskExecutor;

    @Autowired
    @Qualifier("httpClient")
    private HttpClient httpClient;

    private static final String URL = "https://www.baidu.com";

    @Override
    public ReturnT<String> execute(String param) throws Exception
    {
        Pay payQuery = new Pay();
        payQuery.setStatus(SystemConstants.STATUS_TYPE_ACTIVE);

        for (int i = 0; i < 100; i++)
        {
            taskExecutor.execute(new CreateToken(i));

        }
        return SUCCESS;
    }

    class CreateToken implements Runnable
    {
        private int num;

        public CreateToken(int num)
        {
            this.num = num;
        }

        @Override
        public void run()
        {
            HttpResponse response = null;
            try
            {
                HttpGet httpGet = new HttpGet(URL);

                response = httpClient.execute(httpGet);
                String str = EntityUtils.toString(response.getEntity());
                    System.err.println("第" + num + "次:" + str);
            }
            catch (Exception e)
            {
                return;
            }
        }

    }

}
 

       <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.7</version>
        </dependency>

发布了52 篇原创文章 · 获赞 16 · 访问量 67万+

猜你喜欢

转载自blog.csdn.net/qq_30920479/article/details/103610777
今日推荐