如何在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格式化与参数填充:
- 添加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'
- 修改数据源配置,替换JDBC驱动为P6Spy驱动:
spring: datasource: url: jdbc:p6spy:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC driver-class-name: com.p6spy.engine.spy.P6SpyDriver
- 创建
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
相关产品推荐
相关产品推荐

