From 8c29b1ac0ff5e6cff8e40b19c95db1b514e058c9 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 10 Jul 2026 22:11:18 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#4060=20=E4=BF=AE=E5=A4=8D=20wx-java-op?= =?UTF-8?q?en-multi-spring-boot-starter=20=E7=A1=AC=E7=BC=96=E7=A0=81=20Ht?= =?UTF-8?q?tpClient4=20=E5=AF=BC=E8=87=B4=E5=90=AF=E5=8A=A8=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/AbstractWxOpenConfiguration.java | 35 ++++++++++++------- .../properties/WxOpenMultiProperties.java | 16 +++++++++ 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/services/AbstractWxOpenConfiguration.java b/spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/services/AbstractWxOpenConfiguration.java index 0c6387878..f4245402e 100644 --- a/spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/services/AbstractWxOpenConfiguration.java +++ b/spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/services/AbstractWxOpenConfiguration.java @@ -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); + } } } } diff --git a/spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenMultiProperties.java b/spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenMultiProperties.java index 95e5b6671..0c6a22289 100644 --- a/spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenMultiProperties.java +++ b/spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenMultiProperties.java @@ -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 + } + }