Я использую Spring AOP для профилирования времени выполнения метода.Мои методы используют Spring WebFlux и возвращает Mono различных типов, а именно.Map
, List
, пользовательские объекты классов Java.Но jointPoint.proceed()
в @Around
advice возвращает объект.Как я могу вернуть тот же Mono из doAround
метода.Метод, время выполнения которого я хочу узнать, выглядит следующим образом:
public Mono<Map<Integer, Car>> getCarObject(List<Integer> cardIds) {
if (cardIds == null || cardIds.isEmpty()) {
return Mono.fromCallable(() -> new HashMap<>());
}
return Mono.fromCallable(() -> listingClient.getCarObject(carIds).getData());
}
Мой класс аспекта выглядит следующим образом:
@Aspect
@Configuration
public class Demo {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Pointcut("execution(* com.Car.*.mediators.*.*(..))")
public void feignClientPointcut() {
}
@Around("feignClientPointcut()")
public void doAround(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object object = joinPoint.proceed();
long end = System.currentTimeMillis();
long time = end - start;
logger.error("Around Method Name = {}",joinPoint.getSignature().getName());
logger.error("Around time :{}",time);
}
}
Как я могу вернуть тот же Mono из метода doAround
,Потому что при возврате Mono<object>
вызывающая функция метода выдает ошибку, ожидая, что Map
не объект?