我正在尝试构建一个查询日志分析器,它计算每个查询的执行时间,并记录查询是否需要更多时间。与 Wrapper 相比,使用 AspectJ 需要更多时间。因此,如果有性能改进的余地,我想使用 byte buddy 或其他一些库。
这是我当前使用 AspectJ 的实现。
@Aspect
public class QueryLoggerProfiler {
private static final Logger LOGGER = Logger.getLogger(QueryLoggerProfiler.class.getName());
public static final String QUERY_LOGGING_POINTCUT = "execution(* com.abc.PreparedStatement.execute*(..))";
@
Pointcut(QUERY_LOGGING_POINTCUT)
private void queryPointcut() {}
@
Around("queryPointcut()")
public Object profile(ProceedingJoinPoint joinPoint) throws Throwable {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
long start = System.currentTimeMillis();
Object output = joinPoint.proceed();
long elapsedTime = System.currentTimeMillis() - start;
if (elapsedTime >= 5) {
LOGGER.info(">>>>>>>>>>>>>>>>>>>... Going to call the method ... " + method.getName());
LOGGER.info(">>>>>>>>>>>>>>>>>>>... With parameter ... " + method.getParameters());
LOGGER.info(">>>>>>>>>>>>>>>>>>>... Method execution time: " + elapsedTime + " milliseconds.");
}
return output;
}
}
有没有办法记录以及没有性能瓶颈?