Afficher les instructions SQL Hibernate / JPA à partir de Spring Boot

1. Vue d'ensemble

Spring JDBC et JPA fournissent des abstractions sur les API JDBC natives permettant aux développeurs de supprimer les requêtes SQL natives. Cependant, nous avons souvent besoin de voir ces requêtes SQL générées automatiquement et l'ordre dans lequel elles ont été exécutées à des fins de débogage.

Dans ce tutoriel rapide, nous allons examiner différentes façons de consigner ces requêtes SQL dans Spring Boot.

2. Journalisation des requêtes JPA

2.1. Vers la sortie standard

Le moyen le plus simple consiste à vider les requêtes vers la sortie standard en ajoutant ce qui suit à application.properties :

spring.jpa.show-sql=true

Pour embellir ou bien imprimer le SQL, on peut ajouter:

spring.jpa.properties.hibernate.format_sql=true

Bien que cela soit extrêmement simple, ce n'est pas recommandé car il décharge directement tout sur la sortie standard sans aucune optimisation d'un cadre de journalisation.

De plus, il n'enregistre pas les paramètres des instructions préparées.

2.2. Via les enregistreurs

Voyons maintenant comment nous pouvons consigner les instructions SQL en configurant les enregistreurs dans le fichier de propriétés:

logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

La première ligne enregistre les requêtes SQL et la seconde instruction consigne les paramètres de l'instruction préparée.

La jolie propriété d'impression fonctionnera également dans cette configuration.

En définissant ces propriétés, les journaux seront envoyés à l'appender configuré . Par défaut, Spring Boot utilise la connexion avec un appender de sortie standard.

3. Journalisation des requêtes JdbcTemplate

Pour configurer la journalisation des instructions lors de l'utilisation de JdbcTemplate , nous avons besoin des propriétés suivantes:

logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG logging.level.org.springframework.jdbc.core.StatementCreatorUtils=TRACE

Semblable à la configuration de journalisation JPA, la première ligne est pour la journalisation des instructions et la seconde pour les paramètres de journalisation des instructions préparées.

4. Comment ça marche?

Les classes Spring / Hibernate, qui génèrent des instructions SQL et définissent les paramètres, contiennent déjà le code pour les consigner .

Cependant, le niveau de ces instructions de journal est défini sur DEBUG et TRACE respectivement, ce qui est inférieur au niveau par défaut dans Spring Boot - INFO .

En ajoutant ces propriétés, nous définissons simplement ces enregistreurs au niveau requis.

5. Conclusion

Dans ce court article, nous avons examiné les moyens de journaliser les requêtes SQL dans Spring Boot.

Si nous choisissons de configurer plusieurs ajouteurs, nous pouvons également séparer les instructions SQL et d'autres instructions de journal dans différents fichiers journaux pour garder les choses propres.