Java 记录JdbcTemplate查询执行时间

Java 记录JdbcTemplate查询执行时间,java,jdbc,jdbctemplate,Java,Jdbc,Jdbctemplate,我正在编写一个应用程序,它通过org.springframework.jdbc.core.JdbcTemplate与db一起工作。我需要记录这些查询的执行情况。例如,我有一些具有jdbctemplate逻辑的方法 List<Map<String, Object>> data = jdbcTemplate.queryForList(queryTables); List data=jdbcTemplate.queryForList(queryTables); 我需要记录此

我正在编写一个应用程序,它通过
org.springframework.jdbc.core.JdbcTemplate
与db一起工作。我需要记录这些查询的执行情况。例如,我有一些具有jdbctemplate逻辑的方法

List<Map<String, Object>> data = jdbcTemplate.queryForList(queryTables);
List data=jdbcTemplate.queryForList(queryTables);
我需要记录此查询的执行时间,但不需要记录所有方法的执行时间。 我可以通过毫秒减法来实现。但如果我有1500种甚至更多的方法,情况就不是这样了。那么,是否有任何注释或其他方法可以帮助我记录执行时间

  • spring用于测量执行时间,apache也有相同的功能。秒表示例-

  • 使用aop作为执行时间。这里有一些例子

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

  • aop——开销不是很大,当您使用@Transactional时,您也使用aop,所以您已经有了这个悬垂


    如果只想记录dbcTemplate.queryForList()和成对事件的执行时间,请使用秒表。或者您可以创建自己的util方法(wrap 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;
    }
    
    公共静态列表查询ForListWithLogExecution(字符串sql){
    列出结果;
    //使用弹簧秒表测量经过的时间
    秒表=新秒表();
    watch.start();
    list=jdbcTemplate.queryForList(queryTables);
    看,停;
    info(“以毫秒为单位的总执行时间:{0}”,watch.getTotalTimeMillis());
    返回结果;
    }
    
    JdbcTemplate的来源在哪里?使用方面可能是一种选择,但这会产生开销,至少必须记住这一点。简言之,不需要。您可以使用@Markus建议的内容或查看数据库本身。它可能允许你编程。我不确定计算时间的最佳方法是什么,但我制作了一个示例代码,其中我计算了多个方法的执行时间。希望它能工作:哦,有些数据库允许查询日志记录。这将有利于从测量中排除网络和内容。我的应用程序需要使用任何db,因此这不是解决方案