首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring中使用Aspects来计算方法处理时间

在Spring中使用Aspects来计算方法处理时间
EN

Stack Overflow用户
提问于 2016-01-14 17:36:42
回答 1查看 621关注 0票数 0

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

但是我也想在HTML视图中显示这些响应时间。我找不到一种方法将这个时间值返回到视图中。非常感谢你的想法。

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

代码语言:javascript
复制
@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;
}
EN

回答 1

Stack Overflow用户

发布于 2016-01-15 10:48:55

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

  1. The更简单,但是方法不那么优雅:您可以使用ThreadLocal变量。ThreadLocal变量是用于存储任意值的每线程存储方法。您的建议可以将分析结果列表存储在ThreadLocal中,并让代码在稍后的请求/响应周期中执行,该代码收集数据、清除ThreadLocal并在UI.
  2. Just中呈现它,难度稍大一些,但是更优雅的方法:想象分析数据的集合作为事件生产者,而UI渲染器的数据收集器部分作为这些事件的消费者,当您的服务调用完成后,在稍后的呈现阶段呈现它们。您只需要使用事件系统设置您的方面,这样它就可以在事件发生时发布事件,并注册UI渲染器来侦听这些事件。使用AspectName.aspectOf()获取单例方面的实例,并将其用作几乎任何POJO来设置事件系统。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34786035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档