2017-06-20 3 views
1

Ich schreibe eine Anwendung, die mit db über org.springframework.jdbc.core.JdbcTemplate arbeitet. Ich muss die Ausführung dieser Abfragen protokollieren. So habe ich Methoden, die einige jdbctemplate Logik haben, zum BeispielLogging JdbcTemplate Abfrageausführungszeit

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

Ich brauche Zeit der Ausführung dieser Abfrage zu protokollieren, aber nicht des gesamten Verfahrens. Ich kann das über Millisekunden Subtraktion tun. Aber es ist nicht der Fall, wenn ich 1500 Methoden oder noch mehr habe. Gibt es irgendwelche Anmerkungen oder andere Methoden, die mir helfen können, die Ausführungszeit zu protokollieren?

+0

Woher kommt JdbcTemplate? Die Verwendung von Aspekten könnte eine Option sein, aber dies erzeugt Overhead, der zumindest im Kopf behalten werden muss. – Markus

+0

Kurz no. Sie können verwenden, was @Markus vorschlägt oder in die DB selbst schauen. Es kann Ihnen das programmatisch erlauben – efekctive

+0

Ich bin nicht sicher, was der beste Weg ist, um die Zeit zu berechnen, aber ich habe einen Beispielcode, wo ich die Ausführungszeit von Multiples Methoden berechnet. Hoffe, dass es funktioniert: https://stackoverflow.com/questions/27112162/why-is-multiplied-many-times-faster-than-taking-the-square-root – xsami

Antwort

1
  1. Feder Verwendung StopWatch für mesure Ausführungszeit, Apache auch die gleiche StopWatch hat. Beispiel für Stoppuhr - https://www.javacodegeeks.com/2012/08/measure-execution-time-in-java-spring.html

  2. Verwendung AOP für die Ausführungszeit. Hier sind beispielsweise https://veerasundar.com/blog/2010/01/spring-aop-example-profiling-method-execution-time-tutorial/

    mit AOP und benutzerdefinierte Anmerkung Sie Methode markieren, die Sie Ausführungszeit protokolliert werden sollen.

AOP - es ist nicht so groß, Overhead, wenn Sie @Transactional verwenden Sie auch AOP verwenden, so dass Sie bereits in diesem


overhad haben, wenn Sie die Ausführungszeit protokollieren nur für dbcTemplate.queryForList wollen() und in paar pase, verwenden Sie Stoppuhr. oder Sie können Ihre eigene util-Methode erstellen (wrap dbcTemplate.queryForList()), etwas wie: