From f6d02e34d0f1a84dd9d038443e44c5d74a834c08 Mon Sep 17 00:00:00 2001 From: "fuhai999@gmail.com" Date: Tue, 25 Feb 2020 11:38:41 +0800 Subject: [PATCH 1/2] add removeAll method in ApiConfigKit --- .../com/jfinal/weixin/sdk/api/ApiConfigKit.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/jfinal/weixin/sdk/api/ApiConfigKit.java b/src/main/java/com/jfinal/weixin/sdk/api/ApiConfigKit.java index 9ab5219..13e9ec9 100644 --- a/src/main/java/com/jfinal/weixin/sdk/api/ApiConfigKit.java +++ b/src/main/java/com/jfinal/weixin/sdk/api/ApiConfigKit.java @@ -1,13 +1,13 @@ package com.jfinal.weixin.sdk.api; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - import com.jfinal.kit.StrKit; import com.jfinal.log.Log; import com.jfinal.weixin.sdk.cache.DefaultAccessTokenCache; import com.jfinal.weixin.sdk.cache.IAccessTokenCache; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + /** * 将 ApiConfig 绑定到 ThreadLocal 的工具类,以方便在当前线程的各个地方获取 ApiConfig 对象: * 1:如果控制器继承自 MsgController 该过程是自动的,详细可查看 MsgInterceptor 与之的配合 @@ -55,6 +55,13 @@ public class ApiConfigKit { return CFG_MAP.remove(appId); } + /** + * 清除所有的配置,一般情况下用在动态的支持添加或者修改配置的时候 + */ + public static void removeAll() { + CFG_MAP.clear(); + } + public static void setThreadLocalAppId(String appId) { if (StrKit.isBlank(appId)) { appId = CFG_MAP.get(DEFAULT_CFG_KEY).getAppId(); -- Gitee From fd7931a574533d74a262f7a113b0d733112882fd Mon Sep 17 00:00:00 2001 From: "fuhai999@gmail.com" Date: Tue, 25 Feb 2020 11:51:15 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fixed=20=EF=BC=9AremoveApiConfig=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jfinal/weixin/sdk/api/ApiConfigKit.java | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/jfinal/weixin/sdk/api/ApiConfigKit.java b/src/main/java/com/jfinal/weixin/sdk/api/ApiConfigKit.java index 13e9ec9..d0a9d8d 100644 --- a/src/main/java/com/jfinal/weixin/sdk/api/ApiConfigKit.java +++ b/src/main/java/com/jfinal/weixin/sdk/api/ApiConfigKit.java @@ -13,7 +13,7 @@ import java.util.concurrent.ConcurrentHashMap; * 1:如果控制器继承自 MsgController 该过程是自动的,详细可查看 MsgInterceptor 与之的配合 * 2:如果控制器继承自 ApiController 该过程是自动的,详细可查看 ApiInterceptor 与之的配合 * 3:如果控制器没有继承自 MsgController、ApiController,则需要先手动调用 - * ApiConfigKit.setThreadLocalAppId(appId) 来绑定 appId 到线程之上 + * ApiConfigKit.setThreadLocalAppId(appId) 来绑定 appId 到线程之上 */ public class ApiConfigKit { private static final Log log = Log.getLog(ApiConfigKit.class); @@ -37,6 +37,7 @@ public class ApiConfigKit { /** * 添加公众号配置,每个appId只需添加一次,相同appId将被覆盖。 * 第一个添加的将作为默认公众号配置 + * * @param apiConfig 公众号配置 * @return ApiConfig 公众号配置 */ @@ -52,7 +53,29 @@ public class ApiConfigKit { } public static ApiConfig removeApiConfig(String appId) { - return CFG_MAP.remove(appId); + ApiConfig removedConfig = CFG_MAP.remove(appId); + if (removedConfig != null) { + ApiConfig defaultApiConfig = CFG_MAP.get(DEFAULT_CFG_KEY); + + if (defaultApiConfig.getAppId().equals(removedConfig.getAppId())) { + + CFG_MAP.remove(DEFAULT_CFG_KEY); + + ApiConfig firstApiConfig = null; + if (CFG_MAP.size() > 0) { + for (Map.Entry entry : CFG_MAP.entrySet()) { + firstApiConfig = entry.getValue(); + break; + } + } + + if (firstApiConfig != null) { + CFG_MAP.put(DEFAULT_CFG_KEY, firstApiConfig); + } + } + } + + return removedConfig; } /** @@ -89,9 +112,10 @@ public class ApiConfigKit { public static ApiConfig getApiConfig(String appId) { log.debug("appId: " + appId); ApiConfig cfg = CFG_MAP.get(appId); - if (cfg == null) + if (cfg == null) { throw new IllegalStateException("需事先调用 ApiConfigKit.putApiConfig(apiConfig) 将 appId对应的 ApiConfig 对象存入," + - "如JFinalConfig.afterJFinalStart()中调用, 才可以使用 ApiConfigKit.getApiConfig() 系列方法"); + "如JFinalConfig.afterJFinalStart()中调用, 才可以使用 ApiConfigKit.getApiConfig() 系列方法"); + } return cfg; } -- Gitee