feat(商城): 代码优化

1. 优化首页接口响应速度
2. 优化商品详情接口响应速度
3. 优化分类接口响应速度
4. 优化注释
master
wayn 3 years ago
parent 0c43e2956b
commit 258d168b4e

@ -0,0 +1,34 @@
package com.wayn.common.base.entity;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.StringJoiner;
@Getter
@Setter
public class LogMessage implements Serializable {
private static final long serialVersionUID = 3330416032656611600L;
private Integer httpStatus;
private String httpMethod;
private String path;
private long executionTime;
private String clientIp;
private String javaMethod;
private String response;
@Override
public String toString() {
return new StringJoiner(", ", LogMessage.class.getSimpleName() + "[", "]")
.add("httpStatus=" + httpStatus)
.add("httpMethod='" + httpMethod + "'")
.add("path='" + path + "'")
.add("executionTime=" + executionTime)
.add("clientIp='" + clientIp + "'")
.add("javaMethod='" + javaMethod + "'")
.add("response='" + response + "'")
.toString();
}
}

@ -1,7 +1,11 @@
package com.wayn.mobile.framework.config;
import com.wayn.common.config.WaynConfig;
import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@ -13,4 +17,15 @@ public class MvcConfig implements WebMvcConfigurer {
// 本地文件上传路径
registry.addResourceHandler("/upload/**").addResourceLocations("file:" + WaynConfig.getUploadDir() + "/");
}
@Bean
public ServletRegistrationBean dispatcherRegistration() {
return new ServletRegistrationBean(dispatcherServlet());
}
@Bean(name = DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
public DispatcherServlet dispatcherServlet() {
return new WaynDispatcherServlet();
}
}

@ -0,0 +1,75 @@
package com.wayn.mobile.framework.config;
import com.wayn.common.base.entity.LogMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.util.ContentCachingRequestWrapper;
import org.springframework.web.util.ContentCachingResponseWrapper;
import org.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
/**
* DispatcherServlet
*/
@Slf4j
public class WaynDispatcherServlet extends DispatcherServlet {
private static final long serialVersionUID = -3147711009552694708L;
@Override
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
if (!(request instanceof ContentCachingRequestWrapper)) {
request = new ContentCachingRequestWrapper(request);
}
if (!(response instanceof ContentCachingResponseWrapper)) {
response = new ContentCachingResponseWrapper(response);
}
HandlerExecutionChain handler = getHandler(request);
long start = System.currentTimeMillis();
try {
super.doDispatch(request, response);
} finally {
log(request, response, handler, start);
updateResponse(response);
}
}
private void log(HttpServletRequest requestToCache, HttpServletResponse responseToCache, HandlerExecutionChain handler, long start) {
long end = System.currentTimeMillis();
LogMessage log = new LogMessage();
log.setHttpStatus(responseToCache.getStatus());
log.setHttpMethod(requestToCache.getMethod());
log.setPath(requestToCache.getRequestURI());
log.setClientIp(requestToCache.getRemoteAddr());
log.setJavaMethod(handler.toString());
log.setExecutionTime(end - start);
log.setResponse(getResponsePayload(responseToCache));
logger.info(log);
}
private String getResponsePayload(HttpServletResponse response) {
ContentCachingResponseWrapper wrapper = WebUtils.getNativeResponse(response, ContentCachingResponseWrapper.class);
if (wrapper != null) {
byte[] buf = wrapper.getContentAsByteArray();
if (buf.length > 0) {
int length = Math.min(buf.length, 5120);
return new String(buf, 0, length, StandardCharsets.UTF_8);
}
}
return "[unknown]";
}
private void updateResponse(HttpServletResponse response) throws IOException {
ContentCachingResponseWrapper responseWrapper =
WebUtils.getNativeResponse(response, ContentCachingResponseWrapper.class);
responseWrapper.copyBodyToResponse();
}
}
Loading…
Cancel
Save