Tutoriel P6Spy – Quelles requetes SQL execute votre appli ?

Dans certaines applications, la couche d’abstraction des données ne nous permet pas vraiment de savoir ce qu’elle va chercher. Le cas le plus courant est Hibernate, ou tout autre Java Persistant API, qui font leur propre cuisine… sans que l’on sache clairement ce qui se passe. P6Spy est là pour vous aider. Il va vous permettre de voir en temps réel quelles sont les requêtes exécutées. Ainsi le débogage sera grandement facilité. Nous allons voir dans un premier temps sont installation, puis l’affichage des requêtes via Log4J.

Concept

P6Spy est un driver JDBC. Mais il ne remplace pas votre driver JDBC habituel (Oracle, IBM DB2, MySQL, etc.): il le complété. Dorénavant toutes vos classe Java utiliseront le driver P6Spy pour se connecter à votre source donnée, mais P6Spy devra être paramétré afin de rediriger les requêtes vers le driver JDBC de votre base de données.

Connexion classique d’une application java à la base de données:

Connexion avec P6Spy d’une application java à la base de données:

Source: JTips

Installation

Ajouter le fichier JAR du driver JDBC de P6Spy à l’emplacement approprié pour votre projet.

P6Spy peut être téléchargé gratuitement ici

Et modifier les fichiers de configurations propre à votre application pour remplacer la classe de votre driver JDBC par celui de P6Spy.

Driver Class de P6Spy: com.p6spy.engine.spy.P6SpyDriver

/* Exemple de remplacement de Class de driver JDBC. */
//Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.p6spy.engine.spy.P6SpyDriver");

On ajoutera ensuite un fichier de configuration de P6Spy dans le CLASSPATH: spy.properties
#Driver Class de votre vrai base de données (ici MySQL)
realdriver=com.mysql.jdbc.Driver

Affichage des logs

Pour afficher les logs, nous allons passer par Log4J. Il faut ajouter ce code

#specifies the appender to use for logging
appender=com.p6spy.engine.logging.appender.Log4jLogger
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
#appender=com.p6spy.engine.logging.appender.FileLogger
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=p6spy - %m%n
log4j.logger.p6spy=INFO,STDOUT

Si vous n’avez pas installer Log4J, il est possible de configurer P6Spy pour avoir un fichier de sortie. Ajouter dans le fichier spy.properties:
# name of logfile to use, note Windows users should make sure to use forward slashes in their pathname (e:/test/spy.log) (used for file logger only)
logfile = spy.log

Sur un système de type Linux/Unix, vous pouvez suivre en temps réel le déroulement du log:
tail -f spy.log

Affiner ses réglages

Ecrire son propre spy.properties et lui affecter les bon paramétres peut être fastidieux. La meilleur chose à faire est de prendre en modèle un fichier modèle de configuration. Vous pouvez retrouver un modele à cet emplacement.

A lire:

  • Odyssée

    Bonjour,
    je crois qu’il y a un double quote en trop après: realdriver=com.mysql.jdbc.Driver »
    Cordialement,

  • Merci, c’est corrigé