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

旅游类作业网站免费的网站推广平台

旅游类作业网站,免费的网站推广平台,品牌网站建设小7a蝌蚪,加强网站党建频道建设01前言 在 高并发 微服务 中, 传统 手动埋点(System.currentTimeMillis())就像用体温计量火箭速度——代码侵入、重复劳动、维护爆炸。 下文是无侵入、高精度、全链路 监控 API 耗时,全程不碰业务代码的方案! 02实战&…

在这里插入图片描述

01前言

在 高并发 + 微服务 中,
传统 手动埋点(System.currentTimeMillis())就像用体温计量火箭速度——代码侵入、重复劳动、维护爆炸。
下文是无侵入、高精度、全链路 监控 API 耗时,全程不碰业务代码的方案!

02实战:6 种方案横向对比

在这里插入图片描述

03方案详解

方案 1:StopWatch(临时调试)
代码:

@GetMapping("/query")
public ResponseEntity<String> query() throws Exception {StopWatch stopWatch = new StopWatch(); // 创建计时器stopWatch.start(); // 开始计时TimeUnit.MILLISECONDS.sleep(new Random().nextLong(2000)); // 模拟业务stopWatch.stop(); // 结束计时System.out.printf("**方法耗时:%dms**%n", stopWatch.getTotalTimeMillis());return ResponseEntity.ok("api query...");
}

注解:

  1. StopWatch 是 Spring 提供的轻量级计时工具。
  2. 侵入性强:需手动插入到业务代码中。
  3. 适合 临时调试,生产环境 不推荐。

方案 2:AOP 切面(无侵入)
代码:

@Aspect // 声明切面
@Component
public class PerformanceAspect {private static final Logger logger = LoggerFactory.getLogger("api.timed");@Around("@annotation(org.springframework.web.bind.annotation.GetMapping)") // 拦截所有 Get 请求public Object recordExecutionTime(ProceedingJoinPoint pjp) throws Throwable {StopWatch sw = new StopWatch();sw.start();Object result = pjp.proceed(); // 执行原方法sw.stop();logger.info("**方法【{}】耗时: {}ms**", pjp.getSignature(), sw.getTotalTimeMillis());return result;}
}

注解:

  1. @Around 注解拦截所有 GetMapping 方法,零侵入。
  2. 通过 ProceedingJoinPoint 获取方法签名,精准定位慢接口。
  3. 缺点:无法监控非 Spring 管理的类(如手动 new 的对象)。

方案 3:拦截器(Controller 层统一监控)
代码:

public class TimedInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {request.setAttribute("startTime", System.currentTimeMillis()); // 记录开始时间return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {long startTime = (long) request.getAttribute("startTime");long cost = System.currentTimeMillis() - startTime;System.out.printf("**请求【%s】耗时: %dms**%n", request.getRequestURI(), cost);}
}@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new TimedInterceptor()).addPathPatterns("/api/**"); // 拦截所有 /api 下的请求}
}

注解:

  1. preHandle 在请求前记录时间,afterCompletion 在请求后计算耗时。
  2. 只适用于 Controller 层,无法监控 Service/DAO 层方法。
  3. 配置简单,适合 Web 项目快速接入。

方案 4:Filter(Servlet 级通用监控)
代码:

@Component
public class RequestTimingFilter implements Filter {private static final Logger logger = LoggerFactory.getLogger(RequestTimingFilter.class);@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest httpRequest = (HttpServletRequest) request;long startTime = System.nanoTime(); // 高精度计时try {chain.doFilter(request, response); // 继续处理请求} finally {long duration = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime);logger.info("**[{}] {} - {}ms (Status: {})**",httpRequest.getMethod(),httpRequest.getRequestURI(),duration,((HttpServletResponse) response).getStatus());}}
}

注解:

  1. 全局生效,所有请求(包括静态资源)都会被监控。
  2. 粒度较粗,无法定位具体方法耗时。
  3. 可通过 excludePaths 过滤不需要监控的 URI。

方案 5:事件监听(零侵入全局统计)
代码:

@Component
public class TimedListener {@EventListener(ServletRequestHandledEvent.class)public void recordTimed(ServletRequestHandledEvent event) {System.err.println("**请求监控事件: " + event + "**");}
}

注解:

  1. Spring 内部事件机制,无需任何配置。
  2. 只能获取 总耗时,无法拆分各阶段耗时。
  3. 适合 快速接入,不适合精细化监控。

方案 6:Micrometer + Prometheus(可视化监控)
代码:

@RestController
public class ApiController {@Timed(value = "api.query", description = "查询业务接口") // 关键注解@GetMapping("/query")public ResponseEntity<String> query() throws Exception {TimeUnit.MILLISECONDS.sleep(new Random().nextLong(2000));return ResponseEntity.ok("api query...");}
}

配置:

# application.yml
management:endpoints:web:exposure:include: prometheus # 暴露 Prometheus 端点metrics:export:prometheus:enabled: true
Prometheus 配置:- job_name: "spring-boot-app"metrics_path: "/actuator/prometheus"static_configs:- targets: ["localhost:8080"]

注解:

  1. @Timed 注解 零侵入,自动记录耗时指标。
  2. Prometheus + Grafana 可视化展示,支持 报警规则。
  3. 缺点:需引入额外依赖,适合生产环境。

方案 7:SkyWalking(分布式全链路追踪)
启动命令:

java -javaagent:/path/skywalking-agent.jar \-Dskywalking.agent.service_name=your-app \-jar your-app.jar

注解:

  1. 无代码侵入,通过 Java Agent 自动注入。
  2. 支持 分布式链路追踪,跨服务追踪耗时。
  3. 适合微服务架构,强烈推荐!

如何选?

• 单体应用:Micrometer + Prometheus(可视化 + 报警)。
• 微服务架构:SkyWalking(全链路追踪)。
• 临时调试:Arthas(在线诊断神器)。

http://www.dtcms.com/wzjs/144533.html

相关文章:

  • 装饰工程施工管理排名seo公司哪家好
  • 响应式网站特点网上引流推广怎么做
  • 做外贸网站需要注意什么百度推广非企代理
  • 北京公司注册地址挂靠漳州seo建站
  • 建设证书查询官方网站网页制作基础教程
  • 做盗版电影网站问题鹤壁seo
  • 网站搜索引擎友好性分析域名是什么 有什么用
  • 企业官方网站应该怎么样建设什么是搜索引擎优化seo
  • 国家建设部网站2018年百度网盘电脑版登录入口
  • 虚拟主机购买哪里好合肥seo优化排名公司
  • 安徽省建设厅质量监督站网站甘肃网站推广
  • nuxt做多页面网站google chrome
  • 电商网站建设流程教育培训机构前十名
  • 做汽车拆解视频网站保定网站推广公司
  • 网站开发php和python怎么把平台推广出去
  • 找网站建设企业厦门做网站公司有哪些
  • 网站建设方案有哪几种阿里巴巴官网首页
  • 烟台seo网站诊断百度推广登录入口电脑
  • 网站用什么字体做正文免费网站创建
  • 做推送用的网站正规接单赚佣金的平台
  • 新康家园网站建设内蒙古最新消息
  • 义乌网站建设公司哪家好推广优化方案
  • 地名公共服务网站建设长沙网络推广只选智投未来
  • 海洋优质的网站建设博客网站
  • 蚌埠网站建设费用软件网站关键词优化
  • 可以做调查的网站今日最新军事新闻
  • 校园网站建设总结网盘搜索
  • 建站如何注重内容建设网站推广的10种方法
  • 哪里网站建设联系百度关键词指数
  • 龙岗做网站的公司市场营销专业就业方向