在开发和调试基于jpa的spring boot应用时,能够清晰地查看底层生成的sql语句及其绑定的参数至关重要。这有助于我们:
Spring Boot结合Hibernate(JPA的默认实现)提供了强大的日志功能,允许开发者精细控制日志输出级别。然而,随着Spring Boot和Hibernate版本的升级,特别是从Spring Boot 2.x到3.x(对应Hibernate 5.x到6.x),其内部日志分类结构发生了一些变化,导致旧的配置可能不再生效。
在Spring Boot 2.x系列版本中,通常通过以下配置来显示SQL语句和参数绑定:
# application.yml spring: jpa: show-sql: true # 显示所有SQL查询 properties: hibernate: format_sql: true # 格式化SQL logging: level: org.hibernate.sql: debug # 显示生成的SQL语句 org.hibernate.type.descriptor.sql.BasicBinder: trace # 显示参数绑定
或等效的application.properties配置:
# application.properties spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true logging.level.org.hibernate.sql=debug logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace
这里的logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace是关键,它负责输出参数绑定的详细信息。
当项目升级到Spring Boot 3.x(通常使用Hibernate 6.x)后,上述BasicBinder的日志配置将不再有效。Hibernate 6对内部日志类别进行了重构,现在需要使用新的日志级别来捕获参数绑定信息。
要正确地在Spring Boot 3中记录SQL参数绑定,需要调整日志级别配置如下:
# application.yml logging: level: org.hibernate.orm.jdbc.bind: trace # 记录JDBC参数绑定 org.hibernate.type: trace # 记录Hibernate类型信息,辅助理解绑定 org.hibernate.stat: debug # 可选,记录统计信息,如执行时间
或等效的application.properties配置:
# application.properties logging.level.org.hibernate.orm.jdbc.bind=trace logging.level.org.hibernate.type=trace logging.level.org.hibernate.stat=debug
关键变化点:
为了获得最全面的SQL日志输出,建议将SQL显示、格式化以及参数绑定日志配置结合起来。以下是一个完整的application.properties或application.yml配置示例:
application.properties
# ---------------------------------------------------------------------- # JPA/Hibernate SQL 日志配置 # ---------------------------------------------------------------------- # 启用JPA/Hibernate生成的SQL语句在控制台输出 spring.jpa.show-sql=true # 格式化输出的SQL语句,使其更易读 spring.jpa.properties.hibernate.format_sql=true # ---------------------------------------------------------------------- # 日志级别配置 # ---------------------------------------------------------------------- # 显示Hibernate生成的SQL语句(通常由spring.jpa.show-sql=true覆盖,但保持可提供更详细的JDBC操作日志) logging.level.org.hibernate.sql=debug # 【Spring Boot 3.x 关键配置】显示SQL参数绑定信息 logging.level.org.hibernate.orm.jdbc.bind=trace # 显示Hibernate类型处理相关的详细信息,辅助理解参数绑定 logging.level.org.hibernate.type=trace # 可选:显示Hibernate统计信息,如查询执行时间、缓存命中率等 logging.level.org.hibernate.stat=debug
application.yml
# ---------------------------------------------------------------------- # JPA/Hibernate SQL 日志配置 # ---------------------------------------------------------------------- spring: jpa: show-sql: true # 启用JPA/Hibernate生成的SQL语句在控制台输出 properties: hibernate: format_sql: true # 格式化输出的SQL语句,使其更易读 # ---------------------------------------------------------------------- # 日志级别配置 # ---------------------------------------------------------------------- logging: level: org.hibernate.sql: debug # 显示Hibernate生成的SQL语句 org.hibernate.orm.jdbc.bind: trace # 【Spring Boot 3.x 关键配置】显示SQL参数绑定信息 org.hibernate.type: trace # 显示Hibernate类型处理相关的详细信息 org.hibernate.stat: debug # 可选:显示Hibernate统计信息
应用上述配置后,当JPA执行查询时,控制台将不仅显示格式化的SQL语句,还会清晰地列出每个占位符(?)所绑定的具体参数值。
从Spring Boot 2.x升级到3.x时,Hibernate内部日志类别的调整是导致SQL参数绑定日志失效的常见原因。通过将logging.level.org.hibernate.orm.jdbc.bind设置为trace,并辅以org.hibernate.type=trace,开发者可以有效地在Spring Boot 3项目中恢复和利用SQL参数绑定日志功能。这对于日常开发、调试和性能分析工作都具有极高的价值。务必记住在非开发环境中权衡日志详细程度与系统性能之间的关系。
以上就是Spring Boot 3 JPA查询SQL参数绑定日志配置指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号