From 558f4e78802878db26bf557ca25d8853778428c0 Mon Sep 17 00:00:00 2001 From: gtyang Date: Mon, 16 Apr 2018 10:17:23 +0800 Subject: [PATCH] =?UTF-8?q?#535=20=E4=BF=AE=E5=A4=8DTomcat=20=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E6=AD=A3=E5=B8=B8=E5=85=B3=E9=97=AD=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E5=A2=9E=E5=8A=A0=E7=BA=BF=E7=A8=8B=E6=B1=A0?= =?UTF-8?q?shutdown=E7=9B=B8=E5=85=B3=E7=9A=84=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/mp/api/WxMpMessageRouter.java | 23 +++++++++++++++++++ .../weixin/mp/api/WxMpMessageRouterTest.java | 16 +++++++++++++ 2 files changed, 39 insertions(+) diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java index 9cf43b770..8350593aa 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java @@ -75,6 +75,29 @@ public class WxMpMessageRouter { this.exceptionHandler = new LogExceptionHandler(); } + /** + *
+   * 使用自定义的 {@link ExecutorService}
+   * 
+ */ + public WxMpMessageRouter(WxMpService wxMpService, ExecutorService executorService) { + this.wxMpService = wxMpService; + this.executorService = executorService; + this.messageDuplicateChecker = new WxMessageInMemoryDuplicateChecker(); + this.sessionManager = new StandardSessionManager(); + this.exceptionHandler = new LogExceptionHandler(); + } + + /** + *
+   * 如果使用默认的 {@link ExecutorService},则系统退出前,应该调用该方法。
+   * 
+ */ + public void shutDownExecutorService() { + this.executorService.shutdown(); + } + + /** *
    * 设置自定义的 {@link ExecutorService}
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
index 4b919a229..b9424eb02 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
@@ -8,6 +8,8 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
 import org.testng.*;
 import org.testng.annotations.*;
 
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.Map;
 
 /**
@@ -67,9 +69,23 @@ public class WxMpMessageRouterTest {
     prepare(true, sb, router);
     router.route(message);
     Thread.sleep(500);
+    router.shutDownExecutorService();
     Assert.assertEquals(sb.toString(), expected);
   }
 
+  @Test(dataProvider = "messages-1")
+  public void testExternalExcutorService(WxMpXmlMessage message, String expected) throws InterruptedException {
+    StringBuffer sb = new StringBuffer();
+    ExecutorService executorService = Executors.newFixedThreadPool(100);
+    WxMpMessageRouter router = new WxMpMessageRouter(null, executorService);
+    prepare(true, sb, router);
+    router.route(message);
+    Thread.sleep(500);
+    executorService.shutdown();
+    Assert.assertEquals(sb.toString(), expected);
+  }
+
+
   public void testConcurrency() throws InterruptedException {
     final WxMpMessageRouter router = new WxMpMessageRouter(null);
     router.rule().handler(new WxMpMessageHandler() {