Trato de entender cómo crear un aspecto @Around para una función suspendida de Kotlin (por ejemplo, para medir el tiempo dedicado a esta función o para un aspecto @Transactional personalizado):
@Timed("my-timer") suspend fun test() { println("before") delay(50) // invokes ProceedingJoinPoint#proceed() before this line println("after") }Dado que esta función tiene una llamada de función de suspensión, la función de proceder del aspecto @Around se invocará justo antes de la llamada a delay(). Pero obviamente me gustaría medir el tiempo completo dedicado a la función.
¿Cuál es la forma correcta de resolverlo? ¿Tal vez pueda suscribirme de alguna manera en la última continuación del método, o algo así?
Creo que puede resolver su problema fácilmente, si desea medir el tiempo de ejecución de la función, puede hacerlo utilizando una funcionalidad integrada como esta:
val time = measureTimeMillis { // yourSuperFunc() } Además, puede usar measureNanoTime . Para ver la referencia completa aquí .
Esto es rastreado por https://github.com/spring-projects/spring-framework/issues/22462 y lo más probable es que se solucione en 5.3
El mismo problema ocurre con @Transactional .