Spring Boot 中整合 MySQL 并打印 SQL 日志

在 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.propertiesapplication.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 日志的详细程度:

  1. **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>
  2. **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]

五、高级配置

  1. 自定义日志格式

    在 Logback 中调整时间戳、线程名等:

    复制代码
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  2. 按环境控制日志级别

    application-prod.yml中关闭调试日志:

    复制代码
    logging:
      level:
        org.hibernate.SQL: WARN

六、注意事项

  • 生产环境 :避免开启 TRACE级别,防止敏感信息泄露。

  • 性能影响TRACE级别会记录参数绑定细节,可能影响性能。

  • SQL 优化:通过日志分析慢查询,结合索引优化数据库性能。


通过以上配置,可清晰监控 Spring Boot 与 MySQL 的交互细节,适用于开发调试和性能分析。如需进一步定制,可参考 Spring Boot 官方文档

相关推荐
腻害兔10 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社11 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖12 小时前
JDK 26 新特性详解
java·开发语言
马优晨13 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说15 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane199416 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了17 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品17 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘17 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记17 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端