源码地址:https://github.com/li5454yong/springboot-httpclient.git
使用Spring集成httpclient时,需要复杂的配置文件spring管理httpclient。而使用SpringBoot来集成httpclient,我们只需要几个注解,一个java文件就能搞定。
pom文件
XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.httpcomponents
</groupId>
<artifactId>
httpclient
</artifactId>
<version>
4.3.1
</version>
</dependency>
|
首先在与SpringBoot主配置同级的目录下建立一个class。
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
@Configuration
public
class
HttpClient
{
@Value
(
"${http.maxTotal}"
)
private
Integer
maxTotal
;
@Value
(
"${http.defaultMaxPerRoute}"
)
private
Integer
defaultMaxPerRoute
;
@Value
(
"${http.connectTimeout}"
)
private
Integer
connectTimeout
;
@Value
(
"${http.connectionRequestTimeout}"
)
private
Integer
connectionRequestTimeout
;
@Value
(
"${http.socketTimeout}"
)
private
Integer
socketTimeout
;
@Value
(
"${http.staleConnectionCheckEnabled}"
)
private
boolean
staleConnectionCheckEnabled
;
@Bean
(
name
=
"httpClientConnectionManager"
)
public
PoolingHttpClientConnectionManager
getHttpClientConnectionManager
(
)
{
PoolingHttpClientConnectionManager
httpClientConnectionManager
=
new
PoolingHttpClientConnectionManager
(
)
;
httpClientConnectionManager
.
setMaxTotal
(
maxTotal
)
;
httpClientConnectionManager
.
setDefaultMaxPerRoute
(
defaultMaxPerRoute
)
;
return
httpClientConnectionManager
;
}
@Bean
(
name
=
"httpClientBuilder"
)
public
HttpClientBuilder
getHttpClientBuilder
(
@Qualifier
(
"httpClientConnectionManager"
)
PoolingHttpClientConnectionManager
httpClientConnectionManager
)
{
HttpClientBuilder
httpClientBuilder
=
HttpClientBuilder
.
create
(
)
;
httpClientBuilder
.
setConnectionManager
(
httpClientConnectionManager
)
;
return
httpClientBuilder
;
}
@Bean
public
CloseableHttpClient
getCloseableHttpClient
(
@Qualifier
(
"httpClientBuilder"
)
HttpClientBuilder
httpClientBuilder
)
{
return
httpClientBuilder
.
build
(
)
;
}
@Bean
(
name
=
"builder"
)
public
RequestConfig
.
Builder
getBuilder
(
)
{
RequestConfig
.
Builder
builder
=
RequestConfig
.
custom
(
)
;
return
builder
.
setConnectTimeout
(
connectTimeout
)
.
setConnectionRequestTimeout
(
connectionRequestTimeout
)
.
setSocketTimeout
(
socketTimeout
)
.
setStaleConnectionCheckEnabled
(
staleConnectionCheckEnabled
)
;
}
@Bean
public
RequestConfig
getRequestConfig
(
@Qualifier
(
"builder"
)
RequestConfig
.
Builder
builder
)
{
return
builder
.
build
(
)
;
}
}
|
具体的http请求方法的封装这里就不在贴出来,大家可以通过上面的源码链接下载到完整的源码。
接下来写一个测试接口。
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@RestController
public
class
HttpClientController
{
@Resource
private
HttpAPIService
httpAPIService
;
@RequestMapping
(
"httpclient"
)
public
String
test
(
)
throws
Exception
{
String
str
=
httpAPIService
.
doGet
(
"http://www.baidu.com"
)
;
System
.
out
.
println
(
str
)
;
return
"hello"
;
}
}
|
在浏览器中访问 http://localhost:8080/httpclient
可以看到后台打印的结果。