src/main/java/com/moon/server/config/ThreadPoolConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/moon/server/entity/all/StaticData.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/moon/server/helper/AsyncHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/moon/server/interceptor/ProxyFilter.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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); } }; } } 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; 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(); } } } 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; /** * 代çè¿æ»¤å¨ @@ -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); } }); } /**