2016-01-14 63 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來將其設置爲您的事件系統。