From d561dbea2e06c44b54701712a025a5677d22f51d Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期一, 10 七月 2023 17:44:33 +0800 Subject: [PATCH] 1 --- src/main/java/com/moon/server/entity/all/StaticData.java | 2 src/main/java/com/moon/server/helper/AsyncHelper.java | 64 ++++++++++++++++ src/main/java/com/moon/server/config/ThreadPoolConfig.java | 66 ++++++++++++++++ src/main/java/com/moon/server/interceptor/ProxyFilter.java | 62 +++++++++----- 4 files changed, 171 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/moon/server/config/ThreadPoolConfig.java b/src/main/java/com/moon/server/config/ThreadPoolConfig.java new file mode 100644 index 0000000..1c64526 --- /dev/null +++ b/src/main/java/com/moon/server/config/ThreadPoolConfig.java @@ -0,0 +1,66 @@ +package com.moon.server.config; + +import org.apache.commons.lang3.concurrent.BasicThreadFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 绾跨▼姹犻厤缃被 + * @author WWW + * @date 2023-07-10 + */ +@Configuration +public class ThreadPoolConfig { + /** + * 鏍稿績绾跨▼姹犲ぇ灏� + */ + private final static int CORE_POOL_SIZE = 50; + + /** + * 鏈�澶у彲鍒涘缓鐨勭嚎绋嬫暟 + */ + private final static int MAX_POOL_SIZE = 200; + + /** + * 闃熷垪鏈�澶ч暱搴� + */ + private final static int QUEUE_CAPACITY = 1000; + + /** + * 绾跨▼姹犵淮鎶ょ嚎绋嬫墍鍏佽鐨勭┖闂叉椂闂� + */ + private final static int KEEP_ALIVE_SECONDS = 300; + + @Bean(name = "threadPoolTaskExecutor") + public ThreadPoolTaskExecutor threadPoolTaskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setMaxPoolSize(MAX_POOL_SIZE); + executor.setCorePoolSize(CORE_POOL_SIZE); + executor.setQueueCapacity(QUEUE_CAPACITY); + executor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS); + // 绾跨▼姹犲鎷掔粷浠诲姟(鏃犵嚎绋嬪彲鐢�)鐨勫鐞嗙瓥鐣� + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + + return executor; + } + + /** + * 鎵ц鍛ㄦ湡鎬ф垨瀹氭椂浠诲姟 + */ + @Bean(name = "scheduledExecutorService") + protected ScheduledExecutorService scheduledExecutorService() { + return new ScheduledThreadPoolExecutor(CORE_POOL_SIZE, + new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(), + new ThreadPoolExecutor.CallerRunsPolicy()) { + @Override + protected void afterExecute(Runnable r, Throwable t) { + super.afterExecute(r, t); + } + }; + } +} diff --git a/src/main/java/com/moon/server/entity/all/StaticData.java b/src/main/java/com/moon/server/entity/all/StaticData.java index 7dbbee3..7ccd236 100644 --- a/src/main/java/com/moon/server/entity/all/StaticData.java +++ b/src/main/java/com/moon/server/entity/all/StaticData.java @@ -50,6 +50,8 @@ public static final int I90_NEG = -90; + public static final int I120 = 120; + public static final int I180 = 180; public static final int I180_NEG = -180; diff --git a/src/main/java/com/moon/server/helper/AsyncHelper.java b/src/main/java/com/moon/server/helper/AsyncHelper.java new file mode 100644 index 0000000..ac662f8 --- /dev/null +++ b/src/main/java/com/moon/server/helper/AsyncHelper.java @@ -0,0 +1,64 @@ +package com.moon.server.helper; + +import com.moon.server.entity.all.StaticData; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.TimerTask; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * 寮傛甯姪绫� + * @author WWW + * @date 2023-07-10 + */ +public class AsyncHelper { + /** + * 鎿嶄綔寤惰繜10姣 + */ + private final static int OPERATE_DELAY_TIME = 10; + + // private final static AsyncHelper INSTANCE = new AsyncHelper(); + + private final static Log log = LogFactory.getLog(AsyncHelper.class); + + private ScheduledExecutorService executor = SpringContextHelper.getBean("scheduledExecutorService"); + + public AsyncHelper() { + } + + /** + * 鎵ц浠诲姟 + */ + public void execute(TimerTask task) { + executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); + } + + /** + * 鍏抽棴浠诲姟 + */ + public void shutdown() { + shutdownAndAwaitTermination(executor); + } + + /** + * 鍋滄浠诲姟绾跨▼姹� + */ + public static void shutdownAndAwaitTermination(ExecutorService pool) { + try { + if (null == pool || pool.isShutdown()) { + return; + } + + pool.shutdown(); + if (!pool.awaitTermination(StaticData.I120, TimeUnit.SECONDS)) { + pool.shutdownNow(); + } + } catch (InterruptedException ie) { + pool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } +} diff --git a/src/main/java/com/moon/server/interceptor/ProxyFilter.java b/src/main/java/com/moon/server/interceptor/ProxyFilter.java index 87fd264..ff353bb 100644 --- a/src/main/java/com/moon/server/interceptor/ProxyFilter.java +++ b/src/main/java/com/moon/server/interceptor/ProxyFilter.java @@ -7,11 +7,14 @@ import com.moon.server.entity.sys.ResLogEntity; import com.moon.server.entity.sys.TokenEntity; import com.moon.server.entity.sys.UserEntity; +import com.moon.server.helper.AsyncHelper; import com.moon.server.helper.StringHelper; import com.moon.server.helper.WebHelper; import com.moon.server.service.all.PermsService; import com.moon.server.service.all.SysService; import com.moon.server.service.sys.ResLogService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.annotation.Resource; import javax.servlet.*; @@ -19,6 +22,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.TimerTask; /** * 浠g悊杩囨护鍣� @@ -38,6 +42,8 @@ private final static int LEN = "/proxy/".length(); + private static final Log log = LogFactory.getLog(ProxyFilter.class); + public static final String ILLEGAL_RESOURCE = JSON.toJSONString(new ResponseMsg<String>(HttpStatus.UNAUTHORIZED, "娌℃湁璧勬簮璁块棶鏉冮檺")); @Override @@ -46,24 +52,28 @@ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { - HttpServletRequest req = (HttpServletRequest) request; - HttpServletResponse res = (HttpServletResponse) response; + try { + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse res = (HttpServletResponse) response; - // 2.鑾峰彇浠ょ墝 - String token = getToken(req); + // 2.鑾峰彇浠ょ墝 + String token = getToken(req); - // 3.鑾峰彇鐢ㄦ埛 - UserEntity ue = getUser(res, token); - if (null == ue) { - return; + // 3.鑾峰彇鐢ㄦ埛 + UserEntity ue = getUser(res, token); + if (null == ue) { + return; + } + + int resId = getResId(req.getRequestURI(), LEN + token.length() + 1); + if (!check(req, res, ue, token, resId)) { + return; + } + + insertLog(req, ue, resId); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); } - - int resId = getResId(req.getRequestURI(), LEN + token.length() + 1); - if (!check(req, res, ue, token, resId)) { - return; - } - - insertLog(req, ue, resId); } @Override @@ -194,16 +204,22 @@ * 鎻掑叆鏃ュ織 */ private void insertLog(HttpServletRequest req, UserEntity ue, int resId) { - String ip = WebHelper.getIpAddress(req); + AsyncHelper helper = new AsyncHelper(); + helper.execute(new TimerTask() { + @Override + public void run() { + String ip = WebHelper.getIpAddress(req); - ResLogEntity entity = new ResLogEntity(); - entity.setResid(resId); - entity.setType(getRequestType(req.getMethod())); - entity.setIp(ip); - entity.setUrl(req.getRequestURL().toString()); - entity.setCreateUser(ue.getId()); + ResLogEntity entity = new ResLogEntity(); + entity.setResid(resId); + entity.setType(getRequestType(req.getMethod())); + entity.setIp(ip); + entity.setUrl(req.getRequestURL().toString()); + entity.setCreateUser(ue.getId()); - resLogService.insert(entity); + resLogService.insert(entity); + } + }); } /** -- Gitblit v1.9.3