You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot 3中格式化SQL语句?

Spring Boot 3 中实现SQL语句格式化的解决方案

你已经通过以下日志配置成功打印SQL及参数:

<logger name="org.hibernate.SQL" level="DEBUG"/> <!-- show SQL -->
<logger name="org.hibernate.orm.jdbc.bind" level="TRACE"/>

但hibernate.format_sql: true未生效,可按以下步骤排查解决:

一、确认配置正确性

首先确保application.yaml的配置缩进正确,你的配置格式无误,可补充一个辅助属性增强显示效果:

spring:
  jpa:
    properties:
      hibernate.format_sql: true  # 开启SQL格式化
      hibernate.highlight_sql: true  # 可选,开启SQL高亮(部分日志框架支持)

二、检查日志框架的输出配置

如果日志框架(如Logback)的配置中对org.hibernate.SQL的日志消息做了换行替换,会导致格式化后的SQL失去换行效果。例如,若你的Logback配置中有类似以下内容,需要移除:

<encoder>
  <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg,'\n','')%n</pattern>
</encoder>

改为保留原始消息的输出格式:

<encoder>
  <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>

三、使用P6Spy工具(更可靠的替代方案)

如果上述方法仍未生效,可使用P6Spy拦截JDBC调用,实现更稳定的SQL格式化与参数填充:

  1. 添加P6Spy依赖
    Maven(pom.xml):
<dependency>
  <groupId>p6spy</groupId>
  <artifactId>p6spy</artifactId>
  <version>3.9.1</version>
</dependency>

Gradle(build.gradle):

implementation 'p6spy:p6spy:3.9.1'
  1. 修改数据源配置,替换JDBC驱动为P6Spy驱动:
spring:
  datasource:
    url: jdbc:p6spy:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
  1. 创建src/main/resources/spy.properties配置文件,开启格式化:
# 指定日志输出格式
logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
# 开启SQL格式化
format=true
# 日志输出到控制台
appender=com.p6spy.engine.spy.appender.StdoutLogger

使用P6Spy后,日志会直接输出格式化后的SQL,且参数会自动填充到SQL语句中,无需再配置Hibernate绑定参数日志,效果更直观。

内容的提问来源于stack exchange,提问作者Jin Kwon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:52:51