From 3ebd6ed497b2eeb06fa03449b26496a42a343752 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Sat, 11 Nov 2023 20:28:45 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E8=A7=86=E5=9B=BE?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=8F=8F=E8=BF=B0=E8=A1=A5=E5=85=85=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1020123538751488]视图设置描述补充引用方 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1020123538751488 --- .../thread/NeatLogicThread.java | 10 ++++++++- .../threadlocal/RequestContext.java | 21 +++++++++++++++---- .../dao/plugin/SqlCostInterceptor.java | 6 +++++- .../handler/AnonymousApiDispatcher.java | 4 ++++ .../dispatch/handler/ApiDispatcher.java | 4 ++++ .../dispatch/handler/PublicApiDispatcher.java | 4 ++++ 6 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/main/java/neatlogic/framework/asynchronization/thread/NeatLogicThread.java b/src/main/java/neatlogic/framework/asynchronization/thread/NeatLogicThread.java index b604dae65..5306e1a92 100644 --- a/src/main/java/neatlogic/framework/asynchronization/thread/NeatLogicThread.java +++ b/src/main/java/neatlogic/framework/asynchronization/thread/NeatLogicThread.java @@ -17,6 +17,7 @@ package neatlogic.framework.asynchronization.thread; import neatlogic.framework.asynchronization.threadlocal.InputFromContext; +import neatlogic.framework.asynchronization.threadlocal.RequestContext; import neatlogic.framework.asynchronization.threadlocal.TenantContext; import neatlogic.framework.asynchronization.threadlocal.UserContext; import neatlogic.framework.cache.threadlocal.CacheContext; @@ -30,6 +31,7 @@ public abstract class NeatLogicThread implements Runnable { protected UserContext userContext; protected TenantContext tenantContext; protected InputFromContext inputFromContext; + protected RequestContext requestContext; private String threadName; private boolean isUnique = false; @@ -50,6 +52,7 @@ public abstract class NeatLogicThread implements Runnable { userContext = UserContext.get(); tenantContext = TenantContext.get(); inputFromContext = InputFromContext.get(); + requestContext = RequestContext.get(); this.threadName = _threadName; } @@ -57,6 +60,7 @@ public abstract class NeatLogicThread implements Runnable { userContext = UserContext.get(); tenantContext = TenantContext.get(); inputFromContext = InputFromContext.get(); + requestContext = RequestContext.get(); this.threadName = _threadName; this.isUnique = _isUnique; } @@ -66,6 +70,7 @@ public abstract class NeatLogicThread implements Runnable { TenantContext.init(tenantContext); UserContext.init(userContext); InputFromContext.init(inputFromContext); + RequestContext.init(requestContext); try { String oldThreadName = Thread.currentThread().getName(); if (StringUtils.isNotBlank(threadName)) { @@ -90,6 +95,9 @@ public abstract class NeatLogicThread implements Runnable { if (InputFromContext.get() != null) { InputFromContext.get().release(); } + if (RequestContext.get() != null) { + RequestContext.get().release(); + } CacheContext.release(); } } @@ -111,4 +119,4 @@ public abstract class NeatLogicThread implements Runnable { public String getThreadName() { return threadName; } -} \ No newline at end of file +} diff --git a/src/main/java/neatlogic/framework/asynchronization/threadlocal/RequestContext.java b/src/main/java/neatlogic/framework/asynchronization/threadlocal/RequestContext.java index 1b963273d..58ccfa4c9 100644 --- a/src/main/java/neatlogic/framework/asynchronization/threadlocal/RequestContext.java +++ b/src/main/java/neatlogic/framework/asynchronization/threadlocal/RequestContext.java @@ -16,16 +16,14 @@ package neatlogic.framework.asynchronization.threadlocal; +import neatlogic.framework.dto.healthcheck.SqlAuditVo; import neatlogic.framework.restful.constvalue.RejectSource; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.Serializable; -import java.util.Arrays; -import java.util.Locale; -import java.util.Objects; -import java.util.Optional; +import java.util.*; /** * 保存请求信息 @@ -44,6 +42,8 @@ public class RequestContext implements Serializable { private Double tenantRate; //语言 Locale locale; + //收集该请求执行的sql语句 + private List sqlAuditList = Collections.synchronizedList(new ArrayList<>()); public String getUrl() { return url; @@ -101,11 +101,24 @@ public class RequestContext implements Serializable { this.locale = locale; } + public List getSqlAuditList() { + return sqlAuditList; + } + + public void setSqlAuditList(List sqlAuditList) { + this.sqlAuditList = sqlAuditList; + } + + public void addSqlAudit(SqlAuditVo sqlAuditVo) { + sqlAuditList.add(sqlAuditVo); + } + public static RequestContext init(RequestContext _requestContext) { RequestContext context = new RequestContext(); if (_requestContext != null) { context.setUrl(_requestContext.getUrl()); context.setLocale(_requestContext.getLocale()); + context.setSqlAuditList(_requestContext.getSqlAuditList()); } instance.set(context); return context; diff --git a/src/main/java/neatlogic/framework/dao/plugin/SqlCostInterceptor.java b/src/main/java/neatlogic/framework/dao/plugin/SqlCostInterceptor.java index 7a9386ac0..70be64f66 100644 --- a/src/main/java/neatlogic/framework/dao/plugin/SqlCostInterceptor.java +++ b/src/main/java/neatlogic/framework/dao/plugin/SqlCostInterceptor.java @@ -16,6 +16,7 @@ package neatlogic.framework.dao.plugin; +import neatlogic.framework.asynchronization.threadlocal.RequestContext; import neatlogic.framework.asynchronization.threadlocal.TenantContext; import neatlogic.framework.asynchronization.threadlocal.UserContext; import neatlogic.framework.dto.healthcheck.SqlAuditVo; @@ -117,7 +118,6 @@ public class SqlCostInterceptor implements Interceptor { //System.out.println("#############################SQL INTERCEPTOR###############################"); //System.out.println("id:" + sqlId); //System.out.println(sql); - sqlAuditVo.setSql(sql); sqlAuditVo.setId(sqlId); } @@ -139,6 +139,10 @@ public class SqlCostInterceptor implements Interceptor { } } SqlAuditManager.addSqlAudit(sqlAuditVo); + RequestContext requestContext =RequestContext.get(); + if (requestContext != null) { + requestContext.addSqlAudit(sqlAuditVo); + } //System.out.println("time cost:" + (System.currentTimeMillis() - starttime) + "ms"); //System.out.println("###########################################################################"); } diff --git a/src/main/java/neatlogic/module/framework/restful/dispatch/handler/AnonymousApiDispatcher.java b/src/main/java/neatlogic/module/framework/restful/dispatch/handler/AnonymousApiDispatcher.java index 3edc0ba9f..ff2932d99 100644 --- a/src/main/java/neatlogic/module/framework/restful/dispatch/handler/AnonymousApiDispatcher.java +++ b/src/main/java/neatlogic/module/framework/restful/dispatch/handler/AnonymousApiDispatcher.java @@ -42,6 +42,7 @@ import neatlogic.framework.restful.dto.ApiVo; import neatlogic.framework.restful.enums.ApiType; import neatlogic.framework.restful.ratelimiter.RateLimiterTokenBucket; import neatlogic.framework.util.AnonymousApiTokenUtil; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; @@ -139,6 +140,7 @@ public class AnonymousApiDispatcher { returnObj.put("TimeCost", endTime - startTime); returnObj.put("Return", returnV); returnObj.put("Status", "OK"); + returnObj.put("sqlList", CollectionUtils.isEmpty(RequestContext.get().getSqlAuditList()) ? null : RequestContext.get().getSqlAuditList()); } else { returnObj.putAll(JSONObject.parseObject(JSONObject.toJSONString(returnV))); } @@ -165,6 +167,7 @@ public class AnonymousApiDispatcher { returnObj.put("TimeCost", endtime - starttime); returnObj.put("Return", returnV); returnObj.put("Status", "OK"); + returnObj.put("sqlList", CollectionUtils.isEmpty(RequestContext.get().getSqlAuditList()) ? null : RequestContext.get().getSqlAuditList()); } else { returnObj.putAll(JSONObject.parseObject(JSONObject.toJSONString(returnV))); } @@ -191,6 +194,7 @@ public class AnonymousApiDispatcher { returnObj.put("TimeCost", endtime - starttime); returnObj.put("Return", returnV); returnObj.put("Status", "OK"); + returnObj.put("sqlList", CollectionUtils.isEmpty(RequestContext.get().getSqlAuditList()) ? null : RequestContext.get().getSqlAuditList()); } else { returnObj.putAll(JSONObject.parseObject(JSONObject.toJSONString(returnV))); } diff --git a/src/main/java/neatlogic/module/framework/restful/dispatch/handler/ApiDispatcher.java b/src/main/java/neatlogic/module/framework/restful/dispatch/handler/ApiDispatcher.java index e22f4093e..9385e4c36 100644 --- a/src/main/java/neatlogic/module/framework/restful/dispatch/handler/ApiDispatcher.java +++ b/src/main/java/neatlogic/module/framework/restful/dispatch/handler/ApiDispatcher.java @@ -43,6 +43,7 @@ import neatlogic.framework.restful.ratelimiter.RateLimiterTokenBucket; import neatlogic.framework.util.$; import neatlogic.framework.util.HttpRequestUtil; import neatlogic.framework.util.mongodb.IJsonSerializer; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.reflections.Reflections; @@ -162,6 +163,7 @@ public class ApiDispatcher { returnObj.put("TimeCost", endtime - starttime); returnObj.put("Return", returnV); returnObj.put("Status", "OK"); + returnObj.put("sqlList", CollectionUtils.isEmpty(RequestContext.get().getSqlAuditList()) ? null : RequestContext.get().getSqlAuditList()); if (restComponent.disableReturnCircularReferenceDetect()) { returnObj.put("_disableDetect", true); } @@ -191,6 +193,7 @@ public class ApiDispatcher { returnObj.put("TimeCost", endtime - starttime); returnObj.put("Return", returnV); returnObj.put("Status", "OK"); + returnObj.put("sqlList", CollectionUtils.isEmpty(RequestContext.get().getSqlAuditList()) ? null : RequestContext.get().getSqlAuditList()); if (restComponent.disableReturnCircularReferenceDetect()) { returnObj.put("_disableDetect", true); } @@ -216,6 +219,7 @@ public class ApiDispatcher { returnObj.put("TimeCost", endtime - starttime); returnObj.put("Return", returnV); returnObj.put("Status", "OK"); + returnObj.put("sqlList", CollectionUtils.isEmpty(RequestContext.get().getSqlAuditList()) ? null : RequestContext.get().getSqlAuditList()); if (restComponent.disableReturnCircularReferenceDetect()) { returnObj.put("_disableDetect", true); } diff --git a/src/main/java/neatlogic/module/framework/restful/dispatch/handler/PublicApiDispatcher.java b/src/main/java/neatlogic/module/framework/restful/dispatch/handler/PublicApiDispatcher.java index 87d7e7e12..25b8effe7 100644 --- a/src/main/java/neatlogic/module/framework/restful/dispatch/handler/PublicApiDispatcher.java +++ b/src/main/java/neatlogic/module/framework/restful/dispatch/handler/PublicApiDispatcher.java @@ -49,6 +49,7 @@ import neatlogic.framework.restful.dto.ApiVo; import neatlogic.framework.restful.enums.ApiType; import neatlogic.framework.restful.ratelimiter.RateLimiterTokenBucket; import neatlogic.framework.service.AuthenticationInfoService; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; @@ -199,6 +200,7 @@ public class PublicApiDispatcher { returnObj.put("TimeCost", endtime - starttime); returnObj.put("Return", returnV); returnObj.put("Status", "OK"); + returnObj.put("sqlList", CollectionUtils.isEmpty(RequestContext.get().getSqlAuditList()) ? null : RequestContext.get().getSqlAuditList()); } else { returnObj.putAll(JSONObject.parseObject(JSONObject.toJSONString(returnV))); } @@ -221,6 +223,7 @@ public class PublicApiDispatcher { returnObj.put("TimeCost", endtime - starttime); returnObj.put("Return", returnV); returnObj.put("Status", "OK"); + returnObj.put("sqlList", CollectionUtils.isEmpty(RequestContext.get().getSqlAuditList()) ? null : RequestContext.get().getSqlAuditList()); } else { returnObj.putAll(JSONObject.parseObject(JSONObject.toJSONString(returnV))); } @@ -243,6 +246,7 @@ public class PublicApiDispatcher { returnObj.put("TimeCost", endtime - starttime); returnObj.put("Return", returnV); returnObj.put("Status", "OK"); + returnObj.put("sqlList", CollectionUtils.isEmpty(RequestContext.get().getSqlAuditList()) ? null : RequestContext.get().getSqlAuditList()); } else { returnObj.putAll(JSONObject.parseObject(JSONObject.toJSONString(returnV))); } -- Gitee