Spring BootからHibernate/JPA SQLステートメントを表示する
1概要
Springリンク:/spring-jdbc-jdbctemplate[JDBC]および
JPA
は、ネイティブJDBC APIを抽象化したもので、開発者はネイティブSQL照会をやめることができます。ただし、多くの場合、これらの自動生成されたSQLクエリとデバッグ目的で実行された順序を確認する必要があります。
このクイックチュートリアルでは、これらのSQLクエリをSpring Bootで記録するさまざまな方法を見ていきます。
2 JPAクエリのログ記録
2.1. 標準出力へ
最も簡単な方法は、クエリを標準出力にダンプすることです。以下を
application.properties
に追加することです。
spring.jpa.show-sql=true
SQLを美しく、あるいはきれいに印刷するために、以下を追加できます。
spring.jpa.properties.hibernate.format__sql=true
これは非常に単純ですが、ロギングフレームワークを最適化しなくてもすべてを標準出力に直接アンロードするので、推奨されません** 。
さらに、** プリペアドステートメントのパラメータは記録されません。
2.2. ロガー経由
それでは、プロパティファイルでロガーを設定してSQLステートメントを記録する方法を見てみましょう。
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
1行目はSQLクエリを記録し、2行目はprepared statementのパラメータを記録します。
プリティプリントプロパティもこの設定で機能します。
これらのプロパティを設定することによって、
ログは設定されたappender
に送信されます。デフォルトでは、Spring Bootは
logback
を標準のoutアペンダとともに使用します。
3ロギング
JdbcTemplate
クエリ
JdbcTemplate
を使用するときにステートメントロギングを設定するには、以下のプロパティが必要です。
logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG
logging.level.org.springframework.jdbc.core.StatementCreatorUtils=TRACE
JPAロギング設定と同様に、1行目はステートメントのロギング用で、2行目は準備済みステートメントのパラメーターのロギング用です。
4どのように動作しますか?
-
SQL/ステートメントを生成し、パラメータを設定するSpring/Hibernateクラスは、
それらをログに記録するためのコードを既に含んでいます
ただし、これらのログステートメントのレベルはそれぞれ
DEBUG
および
TRACE
に設定されており、これはSpring Bootのデフォルトレベルである
INFO
よりも低くなっています。
これらのプロパティを追加することで、これらのロガーを必要なレベルに設定するだけです。
5結論
この短い記事では、Spring BootでSQLクエリを記録する方法について説明しました。
複数のアペンダを設定する
を選択した場合は、SQLステートメントと他のログステートメントを別々のログファイルに分けて整理することもできます。