Explorar el Código

#535 修复Tomcat 不能正常关闭的问题,增加线程池shutdown相关的操作

master
gtyang hace 7 años
committed by Binary Wang
padre
commit
558f4e7880
Se han modificado 2 ficheros con 39 adiciones y 0 borrados
  1. +23
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java
  2. +16
    -0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java

+ 23
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java Ver fichero

@@ -75,6 +75,29 @@ public class WxMpMessageRouter {
this.exceptionHandler = new LogExceptionHandler();
}

/**
* <pre>
* 使用自定义的 {@link ExecutorService}
* </pre>
*/
public WxMpMessageRouter(WxMpService wxMpService, ExecutorService executorService) {
this.wxMpService = wxMpService;
this.executorService = executorService;
this.messageDuplicateChecker = new WxMessageInMemoryDuplicateChecker();
this.sessionManager = new StandardSessionManager();
this.exceptionHandler = new LogExceptionHandler();
}

/**
* <pre>
* 如果使用默认的 {@link ExecutorService},则系统退出前,应该调用该方法。
* </pre>
*/
public void shutDownExecutorService() {
this.executorService.shutdown();
}


/**
* <pre>
* 设置自定义的 {@link ExecutorService}


+ 16
- 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java Ver fichero

@@ -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() {


Cargando…
Cancelar
Guardar