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

Afficher les instructions SQL Hibernate / JPA à partir du démarrage printanier

1. Vue d'ensemble

SpringJDBC etJPA 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 rapide didacticiel, nous allons examiner différentes manières 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 est de vider les requêtes vers la sortie standard est d'ajouter ce qui suit àapplication.properties:

spring.jpa.show-sql=true

Pour embellir ou imprimer le code SQL, nous pouvons ajouter:

spring.jpa.properties.hibernate.format_sql=true

Bien que cela soit extrêmement simple,it’s not recommended car il décharge directement tout sur la sortie standard sans aucune optimisation d'un cadre de journalisation.

De plus,it doesn’t log the parameters of prepared statements.

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 deuxième instruction enregistre les paramètres de l'instruction préparée.

La jolie propriété print fonctionnera également dans cette configuration.

En définissant ces propriétés,logs will be sent to the configured appender. Par défaut, Spring Boot utiliselogback avec un appender de sortie standard.

3. Journalisation des requêtesJdbcTemplate

Pour configurer la journalisation des instructions lors de l'utilisation deJdbcTemplate, 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 la journalisation JPA, la première ligne concerne la consignation des instructions et la seconde consiste à consigner les paramètres des instructions préparées.

4. Comment ça marche?

The Spring / Hibernate classes, qui génèrent des instructions SQL et définissent les paramètres,already contain the code for logging them.

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

En ajoutant ces propriétés, nous ne faisons que définir ces enregistreurs au niveau requis.

5. Conclusion

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

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