Spring Boot集成Hibernate通过环境变量开启SQL日志的大小写问题
Spring Boot 2.7 环境变量配置SQL日志输出方案
直接使用以下环境变量配置即可生效:
SPRING_JPA_PROPERTIES_HIBERNATE_FORMAT__SQL=true LOGGING_LEVEL_ORG_HIBERNATE_SQL=DEBUG LOGGING_LEVEL_ORG_HIBERNATE_TYPE_DESCRIPTOR_SQL_BASIC_BINDER=TRACE
配置规则说明
Spring Boot 2.x 环境变量到配置属性的转换遵循以下固定逻辑,之前配置不生效就是踩中了规则细节的坑:
- 环境变量会先被统一转为全小写,其中的单下划线
_会被替换为配置层级分隔符. - 如果配置键本身就包含下划线(不是用来分隔层级的),必须用**双下划线
__**表示,转换时双下划线会被替换为属性名里的单个下划线 - 配置键里的驼峰命名片段,需要在驼峰的大写字母拆分位置加单下划线分隔,宽松绑定机制会自动匹配对应驼峰结构
- 配置键里的全大写片段(比如
hibernate.SQL中的SQL),直接在环境变量中写全大写即可,转小写后会和原片段完全匹配,不需要额外处理
之前配置失效的具体原因
- 针对
spring.jpa.properties.hibernate.format_sql: true:format_sql是Hibernate的原生属性,中间的下划线是属性名本身的内容,不是层级分隔符。之前写的SPRING_JPA_PROPERTIES_HIBERNATE_FORMAT_SQL会被解析为spring.jpa.properties.hibernate.format.sql,和实际属性名完全不匹配,自然不会生效。把format和sql之间的单下划线改成双下划线,就能正确解析出format_sql属性段。 - 针对
logging.level.org.hibernate.SQL: DEBUG:之前写的LOGGING_LEVEL_ORG_HIBERNATE_SQL=DEBUG写法本身是正确的,之前误以为失效是另外两个配置错误导致的连带误判。 - 针对
logging.level.org.hibernate.type.descriptor.sql.BasicBinder: TRACE:末尾的BasicBinder是驼峰结构,之前写的BASICBINDER全连写形式无法被宽松绑定机制识别为驼峰片段,匹配不到对应的Logger路径。把驼峰拆分处加下划线写成BASIC_BINDER,就能正确匹配到BasicBinder对应的Logger。
补充说明:Spring Boot 2.7默认搭载Hibernate 5.6.x版本,该版本中BasicBinder打印绑定参数需要配置TRACE级别,之前设置的日志级别是正确的,不需要调整。
内容的提问来源于stack exchange,提问作者waXve
相关产品推荐
相关产品推荐

