Abfangen der JDBC-Anweisungen an die Datenbank mit P6Spy in einer Hibernate-Anwendung
Frage
Ich entwickle eine Hibernate-Konsolenanwendung und verweise auf diesen Artikel http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/ um den P6Spy einzurichten, um zu sehen, was der tatsächliche Wert des "(?)" der vom Ruhezustand generierten SQL.
Das Setup sollte einwandfrei funktionieren, da ich Info- / Debug-Meldungen sehen kann, die von P6Spy während des Starts der Anwendung ausgegeben werden.Danach scheint P6Spy jedoch keine JDBC-Anweisungen mehr abfangen zu können.Aus dem von Hibernate generierten Protokoll (zB: Hibernate: insert into Module (projectName, moduleName, projectId) values (?, ?, ?)
), kann sichergestellt werden, dass die JDBC-Anweisungen bereits an die Datenbank gesendet wurden.
Das Folgende ist meine Einstellung:
Ruhezustand.cfg.XML
- Bereits spezifiziert, um den P6Spy zu verwenden
Treiber :
<property name="hibernate.connection.driver_class">com.p6spy.engine.spy.P6SpyDriver</property>
- Bereits eingeschaltet die
Ruhezustand.show_sql Eigenschaft :
<property name="hibernate.show_sql">true</property>
Spion.Eigenschaft
- Bereits geändert, um meine aktuelle zu verwenden datenbank-JDBC-Treiber , Filter auf gesetzt falsch , includecategories bereits explizit so eingestellt, dass alles protokolliert wird.
module.log=com.p6spy.engine.logging.P6LogFactory realdriver=oracle.jdbc.driver.OracleDriver filter=false dateformat=yyyy.MM.dd HH:mm:ss excludecategories= includecategories=error, info, batch, debug,statement,commit,rollback,result appender=com.p6spy.engine.logging.appender.StdoutLogger
Vermisse ich eine wichtige Einstellung??
Lösung 3
Schließlich gebe ich auf P6Spy
da es sich um die alte Bibliothek handelt, stammt die neueste Version aus dem Jahr 2003.Ich greife auf eine andere ähnliche kostenlose Open Source namens zurück log4jdbc
Informationen zum Abfangen der JDBC-Anweisungen finden Sie unter dieser für weitere Informationen, wenn Sie interessiert sind.
Andere Tipps
Ich habe P6Spy noch nie verwendet, aber Sie können die Bindevariablen in Ihr Protokoll ausgeben lassen.Versuchen Sie, dies in Ihre log4j.properties- oder XML-Datei einzufügen.
log4j.category.org.hibernate.type=DEBUGGEN, KONSOLE
Die übliche Ursache für diese Art von Problem ist, dass der JDBC-Treiber vor dem P6SpyDriver geladen wird.Sie können dieses Problem umgehen, indem Sie deregisterdrivers=true in spy setzen.Eigenschaft.
Übrigens - Dieses Problem wurde in 2.0-alpha-1 behoben.