在 Spring Boot 中整合 MySQL 并打印 SQL 日志,需通过配置数据源、JPA 及日志框架实现。以下是详细步骤及最佳实践:
一、添加依赖
在 pom.xml中引入 Spring Data JPA 和 MySQL 驱动依赖:
<dependencies>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
二、配置数据源与 JPA
在 application.properties或 application.yml中配置 MySQL 连接及日志参数:
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JPA 配置
spring.jpa.hibernate.ddl-auto=update # 自动生成表结构(开发环境)
spring.jpa.show-sql=true # 开启 SQL 日志打印
spring.jpa.properties.hibernate.format_sql=true # 格式化 SQL 语句
三、配置日志级别
通过日志框架(如 Logback)控制 SQL 日志的详细程度:
-
**Logback 配置(
logback-spring.xml)**在
src/main/resources下创建文件,配置不同日志级别:<configuration> <!-- 打印 SQL 语句 --> <logger name="org.hibernate.SQL" level="DEBUG"/> <!-- 打印 SQL 参数(如占位符值) --> <logger name="org.hibernate.type.descriptor.sql.BasicTypeRegistry" level="TRACE"/> <!-- 打印 Hibernate 执行耗时 --> <logger name="org.hibernate.tool.schema.spi" level="TRACE"/> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration> -
**Log4j2 配置(
log4j2.xml)**若使用 Log4j2,配置类似:
<Configuration> <Loggers> <Logger name="org.hibernate.SQL" level="debug"/> <Logger name="org.hibernate.type.descriptor.sql.BasicTypeRegistry" level="trace"/> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
四、验证日志输出
创建实体类和 Repository,触发数据库操作:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// getters/setters
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {}
// 在 Service 或 Controller 中调用
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User saveUser(User user) {
return userRepository.save(user);
}
}
启动应用后,控制台输出示例:
Hibernate: insert into user (name) values (?)
2025-11-17 14:12:00.123 TRACE 12345 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicTypeRegistry : binding parameter [1] as [VARCHAR] - [John]
五、高级配置
-
自定义日志格式
在 Logback 中调整时间戳、线程名等:
<encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> -
按环境控制日志级别
在
application-prod.yml中关闭调试日志:logging: level: org.hibernate.SQL: WARN
六、注意事项
-
生产环境 :避免开启
TRACE级别,防止敏感信息泄露。 -
性能影响 :
TRACE级别会记录参数绑定细节,可能影响性能。 -
SQL 优化:通过日志分析慢查询,结合索引优化数据库性能。
通过以上配置,可清晰监控 Spring Boot 与 MySQL 的交互细节,适用于开发调试和性能分析。如需进一步定制,可参考 Spring Boot 官方文档。