2017-06-20 3 views
1

私は経由でdbで動作しているアプリを書いています。私はそれらのクエリの実行を記録する必要があります。だから私は、私はすべてではない方法でのこのクエリの実行時間をログに記録する必要がある例JdbcTemplateクエリの実行時間をログに記録

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

のためのいくつかのjdbctemplateのロジックを持っている方法を、持っています。 私はミリ秒単位でこれを行うことができます。しかし、1500以上の方法がある場合はそうではありません。だから、実行時間を記録するのに役立つ注釈やその他の方法はありますか? mesure実行時間のため

+0

JdbcTemplateの起源はどこですか?アスペクトの使用はオプションかもしれませんが、これはオーバーヘッドを発生させ、少なくとも頭に入れておく必要があります。 – Markus

+0

短くはありません。 @Markusが示唆していることや、DB自体を調べることができます。それはあなたがプログラムでそれを可能にするかもしれません – efekctive

+0

私は時間を計算するための最良の方法は何かわからないが、私はどこでIm複数のメソッドの実行時間を計算するサンプルコードを作った。これがうまくいくと思う:https://stackoverflow.com/questions/27112162/why-is-multiplied-many-times-faster-than-taking-the-quest-root – xsami

答えて

1
  1. スプリング使用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とカスタム注釈を使用すると、実行時間を記録するメソッドをマークすることができます。

AOP - それはあなたが@Transactionalを使用するときには、すでにあなただけdbcTemplate.queryForListの実行時間を記録したい場合は、これは


をoverhad持っているので、あなたも、AOPを使用するので、大きなオーバーヘッドはありません()とカップルのplaseで、ストップウォッチを使用してください。または、独自の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; 
} 
関連する問題