记录JdbcTemplate查询执行时间

时间:2017-06-20 14:46:49

标签: java jdbc jdbctemplate

我正在通过org.springframework.jdbc.core.JdbcTemplate编写与db一起使用的应用。我需要记录那些查询的执行情况。所以我的方法有一些jdbctemplate逻辑,例如

List<Map<String, Object>> data = jdbcTemplate.queryForList(queryTables);

我需要记录此查询的执行时间,但不记录all方法的执行时间。 我可以通过毫秒减法来做到这一点。但如果我有1500种方法甚至更多,情况并非如此。那么是否有任何注释或任何其他方法可以帮助我记录执行时间?

1 个答案:

答案 0 :(得分:1)

  1. spring使用StopWatch表示执行时间,apache也有StopWatch。秒表示例 - https://www.javacodegeeks.com/2012/08/measure-execution-time-in-java-spring.html

  2. 使用aop执行时间。这里是示例https://veerasundar.com/blog/2010/01/spring-aop-example-profiling-method-execution-time-tutorial/

    使用aop和自定义注释,您可以标记要记录执行时间的方法。

  3. 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;
    }