Skip to content

Commit 85830b7

Browse files
author
litongjava
committed
add httpclient for okhttpclient
1 parent 8540137 commit 85830b7

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

docs/.vuepress/config/sidebar-zh.json

+5
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,11 @@
168168
"22_tio-utils/05.md"
169169
]
170170
},
171+
{
172+
"title": "23_http-client",
173+
"collapsable": false,
174+
"children": ["23_http-client/01.md"]
175+
},
171176
{
172177
"title": "25_性能测试",
173178
"collapsable": false,

docs/zh/23_httpclient/01..md

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# tio-boot 整合 okhttp
2+
3+
## 将 OkHttpClient 添加到 bean 容器
4+
5+
tio-boot 整合 okhttp 非常简单,只需要添加一个配置类将 okhttp3.OkHttpClient 放到 bean 容器中即可,配置示例如下
6+
7+
```
8+
package ai.adsgency.api.config;
9+
10+
import java.util.concurrent.TimeUnit;
11+
12+
import com.litongjava.jfinal.aop.annotation.ABean;
13+
import com.litongjava.jfinal.aop.annotation.AConfiguration;
14+
15+
import okhttp3.ConnectionPool;
16+
import okhttp3.OkHttpClient;
17+
import okhttp3.OkHttpClient.Builder;
18+
19+
@AConfiguration
20+
public class OkHttpClientConfig {
21+
22+
@ABean
23+
public OkHttpClient config() {
24+
Builder builder = new OkHttpClient().newBuilder();
25+
// 连接池
26+
builder.connectionPool(pool());
27+
// 连接超时
28+
builder.connectTimeout(120L, TimeUnit.SECONDS).readTimeout(120L, TimeUnit.SECONDS).build();
29+
return builder.build();
30+
}
31+
32+
private ConnectionPool pool() {
33+
return new ConnectionPool(200, 5, TimeUnit.MINUTES);
34+
}
35+
}
36+
```
37+
38+
## 为什么要将 OkHttpClient 添加到 bean 容器
39+
40+
`OkHttpClient`实例放入容器有多个好处,这种做法在开发大型应用时尤其重要。`OkHttpClient`是一个能够处理 HTTP 请求的高效客户端,具有配置灵活、支持同步阻塞与异步处理 HTTP 请求等特点。以下是将`OkHttpClient`放入容器中的几个主要理由:
41+
42+
1. **重用连接和线程池**`OkHttpClient`实例在内部使用了连接池和线程池来优化资源使用和提高性能。通过将其作为单例(或者有限的几个实例)放入容器中,可以确保整个应用共享这些资源,避免了重复创建和销毁带来的开销,从而减少了内存占用和提高了性能。
43+
44+
2. **统一配置**:将`OkHttpClient`配置在容器中可以让你在一个地方集中管理其配置,如超时设置、连接池大小等。这样做不仅使配置更加集中、易于管理,还能确保整个应用使用的是一致的 HTTP 客户端行为。对于需要调整 HTTP 行为以适应不同环境(开发、测试、生产)的情况,这一点尤其有用。
45+
46+
3. **便于维护和测试**:通过依赖注入管理`OkHttpClient`,可以更容易地在不同的环境或测试场景下替换或模拟这个客户端。这对于编写单元测试和集成测试尤其重要,因为你可以注入一个配置了不同行为(如模拟服务器响应)的客户端,而不用改变测试代码外的实际代码。
47+
48+
4. **减少资源泄漏的风险**:正确管理`OkHttpClient`实例(如通过容器确保其生命周期)有助于防止资源泄漏,例如忘记关闭连接。框架层面的管理有助于自动化这一过程,减少因错误使用 API 导致的问题。
49+
50+
5. **提高开发效率**:最后,通过框架自动管理这些依赖项,开发者可以专注于业务逻辑而不是管理底层的 HTTP 通信细节,从而提高开发效率。
51+
52+
总的来说,将`OkHttpClient`放入容器中是一种最佳实践,它有助于优化应用的性能和资源使用,同时提高了代码的可维护性和测试性。

0 commit comments

Comments
 (0)