2016-01-14 26 views
0

我有一个Spring MVC Web应用程序,它连接到一个外部Web服务以进行不同的操作。要计算Web请求的服务响应时间,我使用aspectj来记录服务调用。我可以完美记录执行Web服务方法所需的时间。在Spring中使用Aspects来计算方法处理时间

但我想在HTML视图中显示这些响应时间。我无法找到让这个时间价值回到观点的方法。你的想法非常感谢。

以下是我如何使用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

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

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