我正在使用 AspecJ 来捕获每个表单中正在执行的查询,并显示每个查询执行所需的时间。我们正在使用spring jdbc,我的方面如下所示:@Aspect public class QueryProfilerAspect {
@Pointcut("call(* org.springframework.jdbc.core.simple.SimpleJdbcTemplate.query* (..))")
public void profileQuery() {
}
@Around("profileQuery()")
public Object profile(ProceedingJoinPoint thisJoinPoint) throws Throwable {
// System.out.println("Inside join point execution");
SimpleJdbcTemplate template = (SimpleJdbcTemplate) thisJoinPoint
.getTarget();
JdbcTemplate jdbcTemplate = (JdbcTemplate) template
.getNamedParameterJdbcOperations().getJdbcOperations();
DataSource ds = jdbcTemplate.getDataSource();
// System.out.println("Datasource name URL =="
// + ds.getConnection().getMetaData().getURL());
// System.out.println("Datasource name ==" + schemaName);
String sqlQuery = thisJoinPoint.getArgs()[0].toString();
final long start, end;
start = System.nanoTime();
Object ll = thisJoinPoint.proceed();
end = System.nanoTime();
long executionTime = ((end - start) / 1000) / 1000;
System.out.println("execution_time=" +executionTime + sqlquery="+sqlQuery );
return ll;
}
功能方面,这很有效,但是如果我把它放在我的应用程序中,它会使应用程序太慢。我正在使用编译时编织。方面在应用程序中找到了 1683 个 query* 方法调用。
我可以做些什么来优化它。任何建议/帮助将不胜感激。