我正在通过org.springframework.jdbc.core.JdbcTemplate
编写与db一起使用的应用。我需要记录那些查询的执行情况。所以我的方法有一些jdbctemplate逻辑,例如
List<Map<String, Object>> data = jdbcTemplate.queryForList(queryTables);
我需要记录此查询的执行时间,但不记录all方法的执行时间。 我可以通过毫秒减法来做到这一点。但如果我有1500种方法甚至更多,情况并非如此。那么是否有任何注释或任何其他方法可以帮助我记录执行时间?
答案 0 :(得分:1)
spring使用StopWatch表示执行时间,apache也有StopWatch。秒表示例 - https://www.javacodegeeks.com/2012/08/measure-execution-time-in-java-spring.html
使用aop执行时间。这里是示例https://veerasundar.com/blog/2010/01/spring-aop-example-profiling-method-execution-time-tutorial/
使用aop和自定义注释,您可以标记要记录执行时间的方法。
aop - 它没有那么大的开销,当你使用@Transactional你也使用aop,所以你已经有了这个overhad
如果您只想记录dbcTemplate.queryForList()的执行时间,请使用秒表。或者您可以创建自己的util方法(包装dbcTemplate.queryForList()),如:
public static List<?> queryForListWithLogExecution(String sql){
List<?> result;
//measuring elapsed time using Spring StopWatch
StopWatch watch = new StopWatch();
watch.start();
list = jdbcTemplate.queryForList(queryTables);
watch.stop();
logger.info("Total execution time in millis: {0}", watch.getTotalTimeMillis());
return result;
}