SpringBootからのHibernate/JPASQLステートメントを表示する
1. 概要
Spring 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
最初の行はSQLクエリをログに記録し、2番目のステートメントはプリペアドステートメントのパラメーターをログに記録します。
きれいな印刷プロパティは、この構成でも機能します。
これらのプロパティを設定すると、ログが構成済みのアペンダーに送信されます。デフォルトでは、SpringBootは標準の出力アペンダーでlogbackを使用します。
3. ロギングJdbcTemplateクエリ
JdbcTemplate を使用するときにステートメントのログを構成するには、次のプロパティが必要です。
logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG
logging.level.org.springframework.jdbc.core.StatementCreatorUtils=TRACE
JPAロギング構成と同様に、最初の行はステートメントのロギング用で、2番目の行はプリペアド・ステートメントのパラメーターをログに記録するためのものです。
4. それはどのように機能しますか?
SQLステートメントを生成してパラメーターを設定するSpring/Hibernateクラスには、それらをログに記録するためのコードがすでに含まれています。
ただし、これらのログステートメントのレベルはそれぞれDEBUGとTRACEに設定されており、SpringBootのデフォルトレベルであるINFOよりも低くなっています。
これらのプロパティを追加することで、これらのロガーを必要なレベルに設定するだけです。
5. 結論
この短い記事では、Spring BootでSQLクエリをログに記録する方法について説明しました。
複数のアペンダーを構成するを選択した場合、SQLステートメントと他のログステートメントを別々のログファイルに分割して、物事をクリーンに保つこともできます。