From 4150141cb00aed0b7601d9b7f7a05aa5914210ad Mon Sep 17 00:00:00 2001 From: cj Date: Fri, 28 Dec 2018 22:54:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A1=AE=E4=BF=9D=E5=BA=94=E7=94=A8=E9=80=80?= =?UTF-8?q?=E5=87=BA=E6=97=B6=E8=83=BD=E5=85=B3=E9=97=AD=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ApplicationShutdownBean.java | 49 +++++++++++++++++++ .../ruoyi/framework/manager/AsyncManager.java | 6 +++ .../SpringSessionValidationScheduler.java | 8 +++ 3 files changed, 63 insertions(+) create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationShutdownBean.java diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationShutdownBean.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationShutdownBean.java new file mode 100644 index 00000000..0aa36432 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationShutdownBean.java @@ -0,0 +1,49 @@ +package com.ruoyi.framework.config; + +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.shiro.web.session.SpringSessionValidationScheduler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; +import java.util.concurrent.TimeUnit; + +/** + * AsyncManagerShutdownBean 类 + * + * @Auther: cj + * @Date: 2018/12/28 + */ +@Component +public class ApplicationShutdownBean { + private static final Logger logger = LoggerFactory.getLogger("sys-user"); + + @Autowired(required = false) + private SpringSessionValidationScheduler springSessionValidationScheduler; + + @PreDestroy + public void destroy(){ + shutdownSpringSessionValidationScheduler(); + shutdownAsyncManager(); + } + + private void shutdownSpringSessionValidationScheduler(){ + if(springSessionValidationScheduler != null && springSessionValidationScheduler.isEnabled()) + try { + logger.info("关闭会话验证任务"); + springSessionValidationScheduler.disableSessionValidation(); + } catch (Exception e) { + logger.error(e.getMessage(),e); + } + } + private void shutdownAsyncManager(){ + try { + logger.info("关闭后台任务线程池"); + AsyncManager.me().shutdown(10, TimeUnit.SECONDS); + } catch (Exception e) { + logger.error(e.getMessage(),e); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java index 0a015a6b..c64a0e4c 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java @@ -40,4 +40,10 @@ public class AsyncManager { executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); } + + public void shutdown(long timeout, TimeUnit unit) throws Exception + { + executor.shutdown(); + executor.awaitTermination(timeout,unit); + } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/SpringSessionValidationScheduler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/SpringSessionValidationScheduler.java index cce436ab..c8e7d4a2 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/SpringSessionValidationScheduler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/SpringSessionValidationScheduler.java @@ -134,6 +134,14 @@ public class SpringSessionValidationScheduler implements SessionValidationSchedu log.debug("Stopping Spring Scheduler session validation job..."); } + if(this.enabled){ + executorService.shutdown(); + try { + executorService.awaitTermination(10,TimeUnit.SECONDS); + } catch (InterruptedException e) { + log.error(e.getMessage(),e); + } + } this.enabled = false; } }