Это плохая идея по двум причинам:
- Эта временная информация является избыточной. Ничто не мешает потребителю самому запускать таймер до вызова вашего веб-сервиса, а затем останавливать таймер, когда он получает ответ.
- Если вы попытаетесь автоматизировать тестирование, вам придется игнорировать эту информацию о времени, поскольку вы не можете предсказать это значение. Это затрудняет тестирование вашего веб-сервиса, так как ответ не является детерминированным.
Теперь хорошо, что вы заботитесь о производительности, но вместо того, чтобы возвращать эти метрики пользователю, я бы записал эти закулисные записи в системные журналы, которые вы можете просмотреть в любое время. Есть много способов сделать это, но вот 2 общих шаблона.
- Используйте регистратор Apache Commons, а затем выполните
long start = System.currentTimeMillis()
в точке входа вашего кода, еще раз позвоните System.currentTimeMillis()
в точке выхода вашего кода, вычислите разницу и просто log.info()
выведите ее.
- Более понятный, но сложный в настройке вариант - использовать Aspect, такой как Spring Framework PerformanceMonitorInterceptor .
Вот рабочий пример, который я скопировал из файла контекста приложения Spring.
<bean id="springPerformanceMonitorAspectInterceptor" class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor">
<property name="loggerName" value="com.myProject.performanceMonitor" />
</bean>
<aop:config>
<aop:pointcut id="springMonitoringPointcut" expression="execution(* com.myProject..*(..))" />
<aop:advisor pointcut-ref="springMonitoringPointcut" advice-ref="springPerformanceMonitorAspectInterceptor" />
</aop:config>