当前位置: 首页 > news >正文

企业网站建设情况 文库学校网站建设培训方案

企业网站建设情况 文库,学校网站建设培训方案,深圳高端保姆公司,做影视网站什么cms好用最近接触一个新的传统项目#xff0c;在联调过程中#xff0c;查看日志特别不方便#xff0c;既无trackId#xff0c;即无接口耗时#xff0c;所以写了该博客。话不多说#xff0c;直接上代码 1、实体类user package com.yk.domain;import lombok.Data;Data public cla…最近接触一个新的传统项目在联调过程中查看日志特别不方便既无trackId即无接口耗时所以写了该博客。话不多说直接上代码 1、实体类user package com.yk.domain;import lombok.Data;Data public class User {private Long id;private String username;private String sex;}2、接口统计返回实体封装类 /*** author : yk* date : 2024/03/11* description : 封装的基础 result*/ Data public class CommonResultT implements Serializable {private Integer code;private String message;private String traceId;private Long costTime;private T data;}2、controller层 Slf4j RestController RequestMapping(user) public class UserController {GetMapping(/query)public CommonResultUser query(RequestParam(name id, required false, defaultValue 1) Long id) {User user new User();user.setId(id);user.setUsername(yk);user.setSex(男);CommonResultUser apiResult new CommonResult();apiResult.setData(user);return apiResult;}PostMapping(/queryUser)public CommonResultUser queryAlert(RequestBody User user) {CommonResultUser apiResult new CommonResult();apiResult.setData(user);return apiResult;}} 3、aspect包 public class TraceIdUtil {public static final String REGEX -;public static final String TRACE_ID trace_id;/*** 从header和参数中获取traceId* 从网关传入数据** param request  HttpServletRequest* return traceId*/public static String getTraceIdByRequest(HttpServletRequest request) {String traceId request.getParameter(TRACE_ID);if (StringUtils.isBlank(traceId)) {traceId request.getHeader(TRACE_ID);}return traceId;}/*** 传递traceId至MDC** param traceId  链路id*/public static void setTraceId(String traceId) {if (StringUtils.isNotBlank(traceId)) {MDC.put(TRACE_ID, traceId);}}/*** 构建traceId** return*/public static String getTraceId() {if (StringUtils.isBlank(MDC.get(TRACE_ID))) {String traceId UUID.randomUUID().toString().replaceAll(REGEX, StringUtils.EMPTY);setTraceId(traceId);return traceId;}return MDC.get(TRACE_ID);}/*** 清理traceId*/public static void removeTraceId() {MDC.remove(TRACE_ID);} }package com.yk.aspect;import jakarta.servlet.ServletOutputStream; import jakarta.servlet.WriteListener; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponseWrapper;import java.io.ByteArrayOutputStream; import java.io.IOException;public class MyServletResponseWrapper extends HttpServletResponseWrapper {private final ByteArrayOutputStream buffer;private final ServletOutputStream out;public MyServletResponseWrapper(HttpServletResponse httpServletResponse) {super(httpServletResponse);buffer new ByteArrayOutputStream();out new WrapperOutputStream(buffer);}Overridepublic ServletOutputStream getOutputStream() {return out;}Overridepublic void flushBuffer()throws IOException {if (out ! null) {out.flush();}}public byte[] getContent() throws IOException {flushBuffer();return buffer.toByteArray();}static class WrapperOutputStream extends ServletOutputStream {private final ByteArrayOutputStream bos;public WrapperOutputStream(ByteArrayOutputStream bos) {this.bos bos;}Overridepublic void write(int b) {bos.write(b);}Overridepublic boolean isReady() {return false;}Overridepublic void setWriteListener(WriteListener writeListener) {}} }Getter public class MyServletRequestWrapper extends HttpServletRequestWrapper {private final String body;public MyServletRequestWrapper(HttpServletRequest request) {super(request);if (POST.equals(request.getMethod().toUpperCase(Locale.ROOT))) {StringBuilder stringBuilder new StringBuilder();BufferedReader bufferedReader null;InputStream inputStream null;try {inputStream request.getInputStream();if (inputStream ! null) {bufferedReader new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));char[] charBuffer new char[128];int bytesRead;while ((bytesRead bufferedReader.read(charBuffer)) 0) {stringBuilder.append(charBuffer, 0, bytesRead);}}} catch (IOException e) {e.printStackTrace();} finally {if (inputStream ! null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (bufferedReader ! null) {try {bufferedReader.close();} catch (IOException e) {e.printStackTrace();}}}body stringBuilder.toString();} else {body request.getQueryString();}}Overridepublic ServletInputStream getInputStream() {final ByteArrayInputStream byteArrayInputStream new ByteArrayInputStream(body.getBytes());return new ServletInputStream() {Overridepublic boolean isFinished() {return false;}Overridepublic boolean isReady() {return false;}Overridepublic void setReadListener(ReadListener readListener) {}Overridepublic int read() {return byteArrayInputStream.read();}};}Overridepublic BufferedReader getReader() {return new BufferedReader(new InputStreamReader(this.getInputStream()));}} import com.alibaba.fastjson.JSONObject; import com.yk.domain.CommonResult; import jakarta.servlet.*; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component;import java.io.IOException; import java.nio.charset.StandardCharsets;Slf4j Component public class ContextFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) {log.info(ContextFilter init );}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {String traceId TraceIdUtil.getTraceId();//为了在post的时候能继续传递MyServletRequestWrapper request new MyServletRequestWrapper((HttpServletRequest) servletRequest);MyServletResponseWrapper response new MyServletResponseWrapper((HttpServletResponse) servletResponse);//消耗时间long start System.currentTimeMillis();log.info(请求入参{} , request.getBody());// 执行主体方法startchain.doFilter(request, response);// 执行主体方法 endlong end System.currentTimeMillis();byte[] content response.getContent();String resultParams ;if (content.length 0) {resultParams new String(content, StandardCharsets.UTF_8);}try {CommonResult? apiResult JSONObject.parseObject(resultParams, CommonResult.class);apiResult.setCostTime(end - start);apiResult.setTraceId(traceId);//返回消息 否则前台收不到消息log.info(返回值{}, JSONObject.toJSONString(apiResult));servletResponse.getOutputStream().write(JSONObject.toJSONString(apiResult).getBytes());} catch (Exception e) {log.info(ContextFilter error , e);servletResponse.getOutputStream().write(resultParams.getBytes());}}Overridepublic void destroy() {TraceIdUtil.removeTraceId();} }4、application.properties server.port8080#配置日志全链路跟踪 logId logging.pattern.console[%p]%d{yyyy-MM-dd HH:mm:ss.SSS}[%X{trace_id}][%X{extra_biz_info}] %m [%c#%M:%L]%n 5、pom配置 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.3/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.yk/groupIdartifactIdspringboot-hellword/artifactIdversion0.0.1-SNAPSHOT/versionnamespringboot-hellword/namedescriptionspringboot-hellword/descriptionpropertiesjava.version17/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.83/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.13.0/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project
http://www.zqtcl.cn/news/140426/

相关文章:

  • 河北建设厅官方网站山西手动网站建设推广
  • 连云港网站建设开发网络营销顾问服务
  • 怎么做网站免有什么网站可以免费建站
  • 安全的营销型网站建设深圳网站建设哪家
  • wordpress能开发商城网站吗seo软件
  • 广东网站建设制作价格低网页升级访问中每天正常更新中
  • 北京市门头沟有没有做网站的小水库运行管理培训教材久久建筑网
  • 免费手机网站app软文推广发稿
  • 安徽网站制作公司建设银行校招网站入口
  • 专业的网站公司到哪里找会员网站模板
  • 山西城乡和建设厅网站首页应用公园下载
  • 自动优化网站建设电话wordpress 后端
  • 淘客网站怎么做啊做网站是什么工作
  • 新媒体 网站建设 管理规范专门卖医疗器械的网站
  • 高水平建设专业网站微商城网站建设平台合同
  • 策划的网站在哪个网站做一照一码
  • wordpress页面如何排序网站优化推广软件
  • 网站描述和关键词怎么写智慧团建网站pc端
  • 苏州营销型网站建设推广医院做网站备案需要哪些资料
  • 怎么看是哪家做的网站呼市浩特网站建设
  • 如何建设淘宝客网站全网营销包括什么
  • 网站建设服务市场广州市几个区
  • 二手网站建设论文答辩校园官方网站如何制作
  • 高科技展厅效果图设计商丘 峰少 seo博客
  • 太原网站优化工具方法广州天河 网站建设
  • 西安市做网站公司有哪些秦皇岛网站制作
  • 用ps做美食网站河北网站设计制作
  • 怎么做自己网站的APIwordpress memcache
  • 昆山高端网站建设机构公司展厅装修效果图
  • 服务器怎样建设网站中国建设银行货币基金网站