Commit e6400610 authored by Administrator's avatar Administrator

gksite接口性能优化1

parent c6389735
......@@ -123,11 +123,11 @@
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 连接池 -->
<!-- fastjson2 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.37</version>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.53</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
......
......@@ -14,8 +14,6 @@ import org.springframework.core.NamedThreadLocal;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.dlbridge.jadp.common.service.JService;
//import com.dlbridge.jadp.common.utils.LogUtils;
......@@ -27,7 +25,7 @@ import com.dlbridge.jadp.common.service.JService;
*/
@Component
@Log4j
public class LogInterceptor extends JService implements HandlerInterceptor {
public class LogInterceptor implements HandlerInterceptor {
@Override
......
......@@ -10,15 +10,13 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.dlbridge.jadp.common.service.JService;
/**
* 手机端视图拦截器
*
* @author ThinkGem
* @version 2014-9-1
*/
public class MobileInterceptor extends JService implements HandlerInterceptor {
public class MobileInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
......
......@@ -4,7 +4,6 @@
package com.dlbridge.jadp.common.interceptor;
import com.alibaba.csp.sentinel.util.StringUtil;
import com.dlbridge.jadp.common.service.JService;
import com.dlbridge.jadp.plugins.cmpt.bean.GeexekUser;
import com.dlbridge.jadp.plugins.cmpt.bean.exception.NoAuthException;
import com.neusoft.www.utils.web.RequestParamHelper;
......@@ -38,7 +37,7 @@ import java.util.StringTokenizer;
*/
@Component
@Log4j2
public class SecurityInterceptor extends JService implements HandlerInterceptor {
public class SecurityInterceptor implements HandlerInterceptor {
@Value("${base.url}")
private String domain;
......@@ -129,6 +128,7 @@ public class SecurityInterceptor extends JService implements HandlerInterceptor
|| uri.startsWith("/ueditor/")
|| uri.startsWith("/static/")
|| uri.startsWith("/api-common/")
|| uri.startsWith("/api/cmpt/getCmpt/")
|| uri.equals("/auth") || uri.equals("/auth_no");
}
......
......@@ -11,6 +11,7 @@ import javax.xml.bind.annotation.XmlTransient;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.common.collect.Maps;
import com.dlbridge.jadp.common.properties.Global;
......@@ -35,17 +36,20 @@ public abstract class JRecord<T> implements Serializable {
/**
* 当前用户
*/
@JSONField(serialize = false)
protected String currentUser;
/**
* 当前实体分页对象
*/
@JSONField(serialize = false)
protected Page<T> page;
/**
* 自定义SQL(SQL标识,SQL内容)
*/
@JSONField(serialize = false)
protected Map<String, String> sqlMap;
/**
......@@ -72,6 +76,7 @@ public abstract class JRecord<T> implements Serializable {
}
@JsonIgnore
@JSONField(serialize = false)
@XmlTransient
public Page<T> getPage() {
if (page == null) {
......@@ -86,6 +91,7 @@ public abstract class JRecord<T> implements Serializable {
}
@JsonIgnore
@JSONField(serialize = false)
@XmlTransient
public Map<String, String> getSqlMap() {
if (sqlMap == null) {
......@@ -130,11 +136,13 @@ public abstract class JRecord<T> implements Serializable {
* 全局变量对象
*/
@JsonIgnore
@JSONField(serialize = false)
public Global getGlobal() {
return Global.getInstance();
}
@JsonIgnore
@JSONField(serialize = false)
@XmlTransient
public String getCurrentUser() {
currentUser = DEFAULT_USER;
......@@ -149,6 +157,7 @@ public abstract class JRecord<T> implements Serializable {
* 获取数据库名称
*/
@JsonIgnore
@JSONField(serialize = false)
public String getDbName() {
return Global.getConfig("jdbc.type");
}
......
......@@ -4,6 +4,7 @@
package com.dlbridge.jadp.common.persistence;
import com.dlbridge.jadp.common.utils.IdGen;
import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
......@@ -21,10 +22,13 @@ public abstract class JaapRecord<T> extends JRecord<T> {
//private static final String DEFAULT_USER = "user";
protected String remarks; // 备注
@JSONField(serialize = false)
protected String createBy; // 创建者
protected Date createDate; // 创建日期
@JSONField(serialize = false)
protected String updateBy; // 更新者
protected Date updateDate; // 更新日期
@JSONField(serialize = false)
protected String delFlag; // 删除标记(0:正常;1:删除;2:审核)
public JaapRecord() {
......@@ -69,6 +73,7 @@ public abstract class JaapRecord<T> extends JRecord<T> {
}
@JsonIgnore
@JSONField(serialize = false)
public String getCreateBy() {
return createBy;
}
......@@ -87,6 +92,7 @@ public abstract class JaapRecord<T> extends JRecord<T> {
}
@JsonIgnore
@JSONField(serialize = false)
public String getUpdateBy() {
return updateBy;
}
......@@ -105,6 +111,7 @@ public abstract class JaapRecord<T> extends JRecord<T> {
}
@JsonIgnore
@JSONField(serialize = false)
public String getDelFlag() {
return delFlag;
}
......
......@@ -40,7 +40,7 @@ public class SpringCommonFilter implements Filter {
private final static String COLON = ":";
private final static String ROOT_PATH = "/";
private boolean httpMethodSpecify = false;
private List<String> excludeUrls = Arrays.asList("/static/**","**.jpg","**.css","**.ico");
private List<String> excludeUrls = Arrays.asList("/static/**","**.jpg","**.css","**.ico","/api/cmpt/getCmpt/**");
private Map<HandlerMethod,String> handlerMethodUrlMap = new ConcurrentHashMap<>(32);
......
package com.dlbridge.jadp.config.web;
import com.alibaba.fastjson2.JSONWriter;
import com.alibaba.fastjson2.support.config.FastJsonConfig;
import com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter;
import com.dlbridge.jadp.common.interceptor.LogInterceptor;
import com.dlbridge.jadp.common.interceptor.SecurityInterceptor;
import org.springframework.context.annotation.Bean;
......@@ -7,6 +10,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
import org.springframework.http.MediaType;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.*;
......@@ -15,6 +19,8 @@ import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import javax.annotation.Resource;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
@Configuration
......@@ -31,6 +37,29 @@ public class WebConfig implements WebMvcConfigurer {
configurer.enable();
}
/**
* 配置消息转换器,用fastjson替换Jackson,解决所有接口的JSON序列化性能问题
*/
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setWriterFeatures(
JSONWriter.Feature.WriteMapNullValue,
JSONWriter.Feature.WriteDateUseDateFormat
);
config.setDateFormat("yyyy-MM-dd HH:mm:ss");
fastJsonConverter.setFastJsonConfig(config);
fastJsonConverter.setDefaultCharset(Charset.forName("UTF-8"));
List<MediaType> supportedMediaTypes = new ArrayList<>();
supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
supportedMediaTypes.add(MediaType.APPLICATION_JSON);
fastJsonConverter.setSupportedMediaTypes(supportedMediaTypes);
converters.add(0, fastJsonConverter);
}
@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
......
package com.dlbridge.jadp.plugins.cmpt.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.dlbridge.jadp.plugins.cmpt.bean.*;
import com.dlbridge.jadp.plugins.cmpt.dao.model.Cmpt;
import com.google.gson.Gson;
......
package com.dlbridge.jadp.plugins.cmpt.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.dlbridge.jadp.plugins.cmpt.bean.Partner;
import com.dlbridge.jadp.plugins.cmpt.dao.mapper.CmptMapper;
import com.dlbridge.jadp.plugins.cmpt.utils.HttpUtil;
......
......@@ -3,7 +3,7 @@ package com.dlbridge.jadp.plugins.cmpt.utils;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONObject;
import com.dlbridge.jadp.plugins.cmpt.dao.model.utils.FaceV3Bean;
import lombok.extern.log4j.Log4j2;
......
package com.dlbridge.jadp.plugins.cmpt.utils.gps;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSON;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
......
package com.dlbridge.jadp.plugins.cmpt.utils.gps;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSON;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
......
package com.dlbridge.jadp.plugins.cmpt.web;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONObject;
import com.dlbridge.jadp.plugins.cmpt.dao.model.*;
import com.dlbridge.jadp.plugins.cmpt.dao.model.vo.CmptHomePageVo;
import com.dlbridge.jadp.plugins.cmpt.service.CmptService;
......
package com.dlbridge.jadp.plugins.cmpt.web;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONObject;
import com.dlbridge.feign.NewsService;
import com.dlbridge.feign.bean.News;
import com.dlbridge.jadp.common.service.JService;
......@@ -38,6 +38,7 @@ import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Log4j2
......@@ -47,6 +48,7 @@ import java.util.*;
@ApiSort(1)
public class MicroApiController {
private static final String SIGNING_CODE = "1";
private static final long CMPT_CACHE_EXPIRE_MINUTES = 5L;
@Resource
private RestTemplate restTemplate;
......@@ -412,9 +414,37 @@ public class MicroApiController {
@ApiResponses({@ApiResponse(code = 200, message = "成功"), @ApiResponse(code = -1, message = "失败", response = ObjectUtils.Null.class), @ApiResponse(code = 200, message = "成功", response = Result.class, responseContainer = "List")})
@ApiOperation(value = "赛事", notes = "赛事", tags = {"首页接口"})
public Result getCmpt(@PathVariable("cmptId") Integer cmptId) {
long startTime = System.currentTimeMillis();
// 先从Redis缓存中获取
String cacheKey = "gk:cmpt:info:" + cmptId;
Object cachedObj = valueOperations.get(cacheKey);
if (cachedObj != null && cachedObj instanceof Cmpt) {
Cmpt cachedCmpt = (Cmpt) cachedObj;
long costTime = System.currentTimeMillis() - startTime;
log.info("[缓存命中] 从缓存中获取赛事信息,cmptId: {}, 耗时: {}ms", cmptId, costTime);
return Result.success().setContent(cachedCmpt);
}
log.info("[缓存未命中] 开始查询数据库,cmptId: {}", cmptId);
long dbStartTime = System.currentTimeMillis();
Cmpt cmpt = cmptService.queryCmptBycmptId(cmptId);
return Result.success()
.setContent(cmpt);
long dbCostTime = System.currentTimeMillis() - dbStartTime;
log.info("[数据库查询] 查询完成,cmptId: {}, 耗时: {}ms", cmptId, dbCostTime);
if (cmpt != null) {
long cacheStartTime = System.currentTimeMillis();
valueOperations.set(cacheKey, cmpt, CMPT_CACHE_EXPIRE_MINUTES, TimeUnit.MINUTES);
long cacheCostTime = System.currentTimeMillis() - cacheStartTime;
log.info("[缓存设置] 赛事信息已缓存,cmptId: {}, 耗时: {}ms", cmptId, cacheCostTime);
}
long totalCostTime = System.currentTimeMillis() - startTime;
log.info("[总耗时] cmptId: {}, 总耗时: {}ms", cmptId, totalCostTime);
return Result.success().setContent(cmpt);
}
......
package com.dlbridge.jadp.plugins.cmpt.web;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONObject;
import com.dlbridge.feign.NewsService;
import com.dlbridge.feign.bean.News;
import com.dlbridge.jadp.plugins.cmpt.bean.FuncSetting;
......
package com.dlbridge.jadp.plugins.cmpt.web;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.dlbridge.feign.GeexekScoreService;
import com.dlbridge.feign.bean.CmptScoreCheckpoint;
import com.dlbridge.jadp.common.interceptor.PageView;
......
package com.dlbridge.jadp.plugins.cmpt.web;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.dlbridge.jadp.plugins.cmpt.bean.Road;
import com.dlbridge.jadp.plugins.cmpt.bean.RoadGpsPoint;
import com.dlbridge.jadp.plugins.cmpt.bean.RoadsGpsCheckpointMap;
......
......@@ -65,9 +65,10 @@ server.url.https=http://localhost:9090/
###redis
spring.redis.port=6379
spring.redis.host=localhost
spring.redis.jedis.pool.min-idle=10
spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.max-active=10
spring.redis.timeout=3000
spring.redis.jedis.pool.min-idle=20
spring.redis.jedis.pool.max-idle=50
spring.redis.jedis.pool.max-active=100
spring.servlet.multipart.max-file-size=10Mb
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-request-size=50Mb
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment