gpt4 book ai didi

java - 使用Spring中的Aspects计算方法处理时间

转载 作者:行者123 更新时间:2023-12-01 10:35:15 25 4
gpt4 key购买 nike

我有一个 Spring MVC Web 应用程序,它连接到外部 Web 服务以执行不同的操作。为了计算网络请求的服务响应时间,我使用aspectj来记录服务调用。我可以完美地记录执行 Web 服务方法所花费的时间。

但我也想在 HTML View 中显示这些响应时间。我找不到一种方法可以将时间值恢复到 View 中。非常感谢您的想法。

以下是我如何使用 sl4j 将这些时间记录到 CSV 文件中。

@Around("execution(* backend.channel.ServiceWrapper.*(..))")
public Object logAroundServiceCall( ProceedingJoinPoint joinPoint ) throws Throwable
{
StopWatch sw = new StopWatch();
sw.start();
Object returnVal = null;
try
{
returnVal = joinPoint.proceed();
}
catch ( Exception e )
{
LOGGER.error( e.getMessage(), e );
}
finally
{
sw.stop();
SERVICE_TIME_LOGGER.info( "{},{}", joinPoint.getSignature().getName(), sw.getTotalTimeMillis() );
}
return returnVal;
}

最佳答案

有很多方法可以做到这一点,我给你两种可能性:

  1. 更简单但不太优雅的方法:您可以使用 ThreadLocal 变量。 ThreadLocal 变量是一种用于存储任意值的每线程存储方法。您的建议可以将分析结果列表存储在 ThreadLocal 中,并在请求/响应周期稍后的某个位置执行代码,收集数据、清除 ThreadLocal 并呈现它在用户界面中。
  2. 稍微困难一点,但更优雅的方法:将分析数据的集合想象为事件生成者,将 UI 渲染器的数据收集器部分想象为这些事件的使用者,稍后再渲染它们在渲染阶段,当您的服务调用全部完成时。您只需要使用事件系统设置您的方面,以便它可以在事件发生时发布事件,并注册您的 UI 渲染器来监听这些事件。使用 AspectName.aspectOf() 获取单例切面的实例,并将其用作几乎任何 POJO 来通过事件系统设置它。

关于java - 使用Spring中的Aspects计算方法处理时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34786035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com