313 Star 3.4K Fork 730

dromara / forest

 / 详情

Spring Boot工程配置forest.connect-timeout不生效

已完成
创建于  
2021-08-12 09:56

版本

Forest: 1.5.0
Backend: okhttp:3.8.1、httpclient:4.5.9

问题

Spring Boot工程在配置Forest连接超时时间forest.connect-timeout = 10000不生效

原因

查看OkHttp3ConnectionManager和HttpclientConnectionManager源码,发现:
okhttp设置connectTimeout和readTimout都是用的forest.timeout配置

public OkHttpClient getClient(ForestRequest request, LifeCycleHandler lifeCycleHandler) {
        // 省略代码..............
        OkHttpClient.Builder builder = new OkHttpClient.Builder()
                .connectionPool(pool)
                .connectTimeout(timeout, TimeUnit.MILLISECONDS)
                .readTimeout(timeout, TimeUnit.MILLISECONDS)
                .cookieJar(new CookieJar() {
                    @Override
                    public void saveFromResponse(HttpUrl url, List<Cookie> okCookies) {
                        ForestCookies cookies = new ForestCookies();
                        for (Cookie okCookie: okCookies) {
                            ForestCookie cookie = ForestCookie.createFromOkHttpCookie(okCookie);
                            cookies.addCookie(cookie);
                        }
                        lifeCycleHandler.handleSaveCookie(request, cookies);
                    }

httpclient设置setConnectTimeout和setSocketTimeout使用的forest.timeout配置,代码如下:

public HttpClient getHttpClient(ForestRequest request, CookieStore cookieStore) {
        //省略代码...........

        RequestConfig.Builder configBuilder = RequestConfig.custom();
        // 设置连接超时
        configBuilder.setConnectTimeout(request.getTimeout());

        // 设置读取超时
        Integer timeout = request.getTimeout();
        if (timeout == null) {
            timeout = request.getConfiguration().getTimeout();
        }
        configBuilder.setSocketTimeout(timeout);
        // 设置从连接池获取连接实例的超时
        configBuilder.setConnectionRequestTimeout(HttpConnectionConstants.DEFAULT_READ_TIMEOUT);
        // 省略代码.........

疑问

不知道开发者为啥这样做,是否出于某些原因,如果是出于某些原因,应该修改官方文档去掉forest.connect-timeout配置说明,并修改forest.timeout配置的作用

评论 (3)

Moonlight 创建了任务
Moonlight 关联仓库设置为dromara/forest
Moonlight 修改了描述
Moonlight 修改了描述
展开全部操作日志

确实,我这边也遇到这个问题, 不然connect-timeout配了根本没用
configBuilder.setConnectTimeout(request.getConnectTimeout())

好的,我修复一下

已在 v1.5.6 版本FIX

公子骏 负责人设置为公子骏
公子骏 添加了
 
bug
标签
公子骏 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
1216742 dt flys 1594991700
Java
1
https://gitee.com/dromara/forest.git
git@gitee.com:dromara/forest.git
dromara
forest
forest

搜索帮助