From 5f7141c09fdcfd4ed7ec6db42069133ad978880e Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Sun, 24 Oct 2021 00:15:07 +0800
Subject: [PATCH] 新增本地缓存方法,逐步替换redis
---
zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java | 82 +++++++++++++--------------
zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java | 8 ++
zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java | 46 ++++++++++++---
3 files changed, 84 insertions(+), 52 deletions(-)
diff --git a/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java b/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
index 90acb1a..caf92b3 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
@@ -3,6 +3,7 @@
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.web.BaseAction;
+import com.matrix.system.common.init.InitWebContainer;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -73,4 +74,11 @@
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "debug模式开启");
}
+ @RequestMapping("/getLocalCache")
+ public @ResponseBody AjaxResult getLocalCache(String key) {
+ Object cache=InitWebContainer.getLocalCache(key);
+ return AjaxResult.buildSuccessInstance(cache);
+ }
+
+
}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java b/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
index a9f0527..fa4c035 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
@@ -4,16 +4,24 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import javax.servlet.ServletContext;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
+import com.matrix.core.tools.WebUtil;
import com.matrix.system.common.bean.SysCompany;
import com.matrix.system.common.service.SysCompanyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.context.ServletContextAware;
@@ -25,12 +33,14 @@
* @author:姜友瑶
* @date 2016年10月18日
*/
-@Controller
-public class InitWebContainer implements ServletContextAware{
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class InitWebContainer implements ApplicationRunner {
+
+
+ private static ConcurrentMap<String,Object> localCache=new ConcurrentHashMap(60);
private static final String TRUE = "true";
-
- private ServletContext servletContext;
static private final String LANGUAGE_ZH = "zh";
@@ -56,12 +66,10 @@
*
* 容器启动后加载数据
* @author:姜友瑶
- * @param sc
* @date 2016年10月18日
*/
@Override
- public void setServletContext(ServletContext sc) {
- this.servletContext = sc;
+ public void run(ApplicationArguments args) {
// 初始化调试模式
initDebug();
@@ -70,7 +78,7 @@
//初始化公司
initParams();
LogUtil.info("\r\n\r\n**********************************************\r\n"
- + "* =========== Matrix启动成功 ===========\r\n"
+ + "* =========== 成功 ===========\r\n"
+ "* DEBUG模式:" + debug+"*\r\n"
+ "* 语言环境:" + Locale.getDefault().getLanguage()+"\r\n"
@@ -118,10 +126,30 @@
for (SysCompany sysCompany : company) {
companyMap.put(sysCompany.getComWebUrl(), sysCompany);
}
- servletContext.setAttribute("companyMap", companyMap);
+ saveLocalCache("companyMap", companyMap);
}
+ /**
+ * 获取本地缓存
+ * @param key
+ * @param <T>
+ * @return
+ */
+ public static <T> T getLocalCache(String key){
+ return (T)localCache.get(key);
+ }
+
+ /**
+ * 保存一个本地缓存
+ * @param key
+ * @param value
+ */
+ public static void saveLocalCache(String key,Object value){
+ if(null!=localCache.put(key,value)){
+ LogUtil.debug("覆盖原有缓存{}",key);
+ }
+ }
}
diff --git a/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java b/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
index 7c441ef..d377706 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
@@ -1,8 +1,10 @@
package com.matrix.system.common.interceptor;
import com.matrix.core.tools.LogUtil;
+import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.common.bean.SysCompany;
+import com.matrix.system.common.init.InitWebContainer;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@@ -15,6 +17,7 @@
/**
* 域名与公司对应绑定拦截
+ *
* @author JIANGYOUYAO
* @email 935090232@qq.com
* @date 2017年11月29日
@@ -23,55 +26,48 @@
public class HostInterceptor extends HandlerInterceptorAdapter {
- public static final String ATTR_COMPANY = "company";
+ public static final String ATTR_COMPANY = "company";
- @Override
- public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
- throws Exception {
- }
+ @Override
+ public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
+ throws Exception {
+ }
- /**
- * 通用拦截器
- */
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
- SysCompany company= WebUtil.getSessionAttribute(ATTR_COMPANY);
+ /**
+ * 通用拦截器
+ */
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
- if (company != null) {
- LogUtil.debug("匹配到公司{}", company.getComName());
- return true;
- } else {
- // 获得请求的域名--由小程序直接传过来companyCode参数对应公司的网址
- String host = request.getHeader("companyCode");
- LogUtil.debug("当前请求域名{}", host);
- @SuppressWarnings("unchecked")
- Map<String, SysCompany> companyMap = (Map<String, SysCompany>) WebUtil.getServletContext()
- .getAttribute("companyMap");
- if(Objects.nonNull(companyMap)){
- Set<String> hostSet = companyMap.keySet();
- for (String key : hostSet) {
- LogUtil.debug("-- 匹配公司key={},host={} 匹配结果={}", key , host, key.contains(host));
- if (key.contains(host)) {
- // 查到公司后存到sesssion中
- WebUtil.setSessionAttribute(ATTR_COMPANY, companyMap.get(key));
- return true;
- }
- }
- }
- }
- LogUtil.debug("没有匹配到对应的公司");
- return false;
- }
+ // 获得请求的域名--由小程序直接传过来companyCode参数对应公司的网址
+ String host = request.getHeader("companyCode");
+ LogUtil.debug("当前请求域名{}", host);
+ if (StringUtils.isBlank(host)) {
+ return false;
+ }
+
+ Map<String, SysCompany> companyMap = InitWebContainer.getLocalCache("companyMap");
+ SysCompany company=companyMap.get(host);
+ if(Objects.nonNull(company)){
+ // 查到公司后存到sesssion中
+ LogUtil.debug("匹配到公司{}", company.getComName());
+ WebUtil.setSessionAttribute(ATTR_COMPANY, company);
+ return true;
+ }
+ LogUtil.debug("没有匹配到对应的公司");
+ return false;
+ }
- /**
- * 获取当前域名对于的公司ID
- * @return
- */
- public static Long getCompanyId() {
- return ((SysCompany) WebUtil.getSessionAttribute(ATTR_COMPANY)).getComId();
- }
+ /**
+ * 获取当前域名对于的公司ID
+ *
+ * @return
+ */
+ public static Long getCompanyId() {
+ return ((SysCompany) WebUtil.getSessionAttribute(ATTR_COMPANY)).getComId();
+ }
}
--
Gitblit v1.9.1