基于 P6Spy 的 SQL 监控自动配置模块,通过 EnvironmentPostProcessor 在 Spring Boot 启动时动态配置 P6Spy 参数,支持在 application.yml 中配置所有 P6Spy 原生属性。

仓库坐标

Maven

<dependency>
    <groupId>com.luamas.thinkbridge</groupId>
    <artifactId>p6spy-spring-boot-starter</artifactId>
</dependency>

Gradle

implementation("com.luamas.thinkbridge:p6spy-spring-boot-starter")

功能特性

  • 自动将 application.yml 中的 P6Spy 配置映射到 P6Spy 原生属性

  • 支持标准驼峰和短横线(kebab-case)两种属性命名方式

  • 通过 EnvironmentPostProcessor 实现环境变量动态配置

  • 启用后自动将 JDBC 驱动替换为 P6Spy 代理驱动

  • 支持 P6SpyCoverSpringBootEnvironmentPostProcessor 在不引入 spring-boot-starter 时独立使用

配置

think:
  p6spy:
    config:
      # 是否启用,默认启用
      enabled: true
      # JDBC 驱动列表(逗号分隔)
      driverlist: com.mysql.cj.jdbc.Driver
      # 日志文件路径
      logfile: spy.log
      # 日志消息格式类
      log-message-format: com.p6spy.engine.spy.appender.SingleLineFormat
      # 是否追加日志
      append: true
      # 日期格式
      dateformat: yyyy-MM-dd HH:mm:ss
      # Appender 类型
      appender: com.p6spy.engine.spy.appender.FileLogger
      # 模块列表
      modulelist: com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.spy.P6SpyFactory
      # 打印堆栈
      stacktrace: false
      # JMX 暴露
      jmx: true
      # 自动刷新
      autoflush: false
      # 重新加载属性
      reloadproperties: false
      # 重新加载间隔(秒)
      reloadpropertiesinterval: 60

配置属性一览

基础配置

属性

默认值

说明

think.p6spy.config.enabled

true

是否启用 P6Spy

think.p6spy.config.driverlist

空

JDBC 驱动列表,逗号分隔

think.p6spy.config.logfile

spy.log

日志文件路径

think.p6spy.config.log-message-format

SingleLineFormat

日志消息格式类

think.p6spy.config.append

true

是否追加日志

think.p6spy.config.dateformat

空

日期格式

think.p6spy.config.appender

FileLogger

Appender 类型

think.p6spy.config.modulelist

P6LogFactory, P6SpyFactory

启用的模块列表

高级配置

属性

默认值

说明

think.p6spy.config.stacktrace

false

是否打印堆栈

think.p6spy.config.stacktraceclass

空

堆栈过滤类名

think.p6spy.config.jmx

true

是否通过 JMX 暴露配置

think.p6spy.config.jmx-prefix

空

JMX 前缀

think.p6spy.config.autoflush

false

是否自动刷新

think.p6spy.config.reloadproperties

false

是否支持热加载配置

think.p6spy.config.reloadpropertiesinterval

60

热加载间隔(秒)

think.p6spy.config.custom-log-message-format

空

自定义日志消息格式模板

自定义事件监听器

可以通过 modulelist 配置自定义 JdbcEventListener 实现类,例如使用 db-change 模块的变更追踪监听器:

think:
  p6spy:
    config:
      modulelist: com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.spy.P6SpyFactory,com.luamas.thinkbridge.common.dbchange.ThinkBridgeP6spyEventListener

独立使用(数据变更追踪)

配合 db-change 模块实现数据变更追踪,只需引入依赖并配置上述 modulelist 即可开箱使用。框架会自动捕获所有 INSERT/UPDATE/DELETE 操作,完成新旧值对比,并通过管道广播给监听器。详细用法请参考 数据变更追踪 文档。

属性命名规则

所有配置属性支持两种命名方式:

  • 标准方式:think.p6spy.config.logMessageFormat(驼峰)

  • 短横线方式:think.p6spy.config.log-message-format(kebab-case)

两种方式效果相同。

注意事项

  • 启用 P6Spy 后,Spring Boot 会自动将 spring.datasource.driver-class-name 替换为 com.p6spy.engine.spy.P6SpyDriver

  • 日志文件路径在 Windows 下请使用正斜杠(/)

  • 生产环境建议关闭 reloadproperties 以避免性能影响

  • 使用 P6SpyCoverSpringBootEnvironmentPostProcessor 时无需引入本 starter