1
0
mirror of synced 2026-10-18 13:26:12 +08:00

🎨 #4060 修复 wx-java-open-multi-spring-boot-starter 硬编码 HttpClient4 导致启动失败的问题

This commit is contained in:
Copilot
2026-07-10 22:11:18 +08:00
committed by GitHub
parent d9ab1b0f98
commit 8c29b1ac0f
2 changed files with 38 additions and 13 deletions

View File

@@ -11,7 +11,8 @@ import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder;
import me.chanjar.weixin.open.api.WxOpenConfigStorage;
import me.chanjar.weixin.open.api.WxOpenService;
import me.chanjar.weixin.open.api.impl.WxOpenInMemoryConfigStorage;
import me.chanjar.weixin.open.api.impl.WxOpenServiceImpl;
import me.chanjar.weixin.open.api.impl.WxOpenServiceApacheHttpClientImpl;
import me.chanjar.weixin.open.api.impl.WxOpenServiceHttpComponentsImpl;
import org.apache.commons.lang3.StringUtils;
import java.util.Collection;
@@ -73,7 +74,13 @@ public abstract class AbstractWxOpenConfiguration {
protected abstract WxOpenInMemoryConfigStorage wxOpenConfigStorage(WxOpenMultiProperties wxOpenMultiProperties);
public WxOpenService wxOpenService(WxOpenConfigStorage configStorage, WxOpenMultiProperties wxOpenMultiProperties) {
WxOpenService wxOpenService = new WxOpenServiceImpl();
WxOpenMultiProperties.HttpClientType httpClientType = wxOpenMultiProperties.getConfigStorage().getHttpClientType();
WxOpenService wxOpenService;
if (httpClientType == WxOpenMultiProperties.HttpClientType.APACHE_HTTP) {
wxOpenService = new WxOpenServiceApacheHttpClientImpl();
} else {
wxOpenService = new WxOpenServiceHttpComponentsImpl();
}
wxOpenService.setWxOpenConfigStorage(configStorage);
return wxOpenService;
}
@@ -137,17 +144,19 @@ public abstract class AbstractWxOpenConfiguration {
config.setRetrySleepMillis(retrySleepMillis);
config.setMaxRetryTimes(maxRetryTimes);
// 设置自定义的HttpClient超时配置
ApacheHttpClientBuilder clientBuilder = config.getApacheHttpClientBuilder();
if (clientBuilder == null) {
clientBuilder = DefaultApacheHttpClientBuilder.get();
}
if (clientBuilder instanceof DefaultApacheHttpClientBuilder) {
DefaultApacheHttpClientBuilder defaultBuilder = (DefaultApacheHttpClientBuilder) clientBuilder;
defaultBuilder.setConnectionTimeout(storage.getConnectionTimeout());
defaultBuilder.setSoTimeout(storage.getSoTimeout());
defaultBuilder.setConnectionRequestTimeout(storage.getConnectionRequestTimeout());
config.setApacheHttpClientBuilder(defaultBuilder);
// 仅在使用 Apache HttpClient 4.x 时配置 ApacheHttpClientBuilder 超时参数
if (storage.getHttpClientType() == WxOpenMultiProperties.HttpClientType.APACHE_HTTP) {
ApacheHttpClientBuilder clientBuilder = config.getApacheHttpClientBuilder();
if (clientBuilder == null) {
clientBuilder = DefaultApacheHttpClientBuilder.get();
}
if (clientBuilder instanceof DefaultApacheHttpClientBuilder) {
DefaultApacheHttpClientBuilder defaultBuilder = (DefaultApacheHttpClientBuilder) clientBuilder;
defaultBuilder.setConnectionTimeout(storage.getConnectionTimeout());
defaultBuilder.setSoTimeout(storage.getSoTimeout());
defaultBuilder.setConnectionRequestTimeout(storage.getConnectionRequestTimeout());
config.setApacheHttpClientBuilder(defaultBuilder);
}
}
}
}

View File

@@ -38,6 +38,11 @@ public class WxOpenMultiProperties implements Serializable {
*/
private StorageType type = StorageType.memory;
/**
* http客户端类型.
*/
private HttpClientType httpClientType = HttpClientType.HTTP_COMPONENTS;
/**
* 指定key前缀.
*/
@@ -122,4 +127,15 @@ public class WxOpenMultiProperties implements Serializable {
redistemplate
}
public enum HttpClientType {
/**
* Apache HttpClient 4.x
*/
APACHE_HTTP,
/**
* Apache HttpClient 5.x (HttpComponents)
*/
HTTP_COMPONENTS
}
}