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 0c63878783..f4245402e0 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.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 @@ protected WxOpenMultiServices wxOpenMultiServices(WxOpenMultiProperties wxOpenMu 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 @@ private void configHttp(WxOpenInMemoryConfigStorage config, WxOpenMultiPropertie 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 95e5b66712..0c6a222891 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 static class ConfigStorage implements Serializable { */ private StorageType type = StorageType.memory; + /** + * http客户端类型. + */ + private HttpClientType httpClientType = HttpClientType.HTTP_COMPONENTS; + /** * 指定key前缀. */ @@ -122,4 +127,15 @@ public enum StorageType { redistemplate } + public enum HttpClientType { + /** + * Apache HttpClient 4.x + */ + APACHE_HTTP, + /** + * Apache HttpClient 5.x (HttpComponents) + */ + HTTP_COMPONENTS + } + }