網(wǎng)站與域名的關(guān)系廣告免費(fèi)發(fā)布信息平臺(tái)
介紹一下P6spy驅(qū)動(dòng)
p6spy 是一款開源的數(shù)據(jù)庫(kù)監(jiān)控框架,主要用于 攔截和記錄應(yīng)用程序與數(shù)據(jù)庫(kù)之間的所有交互(如 SQL 語句、參數(shù)、執(zhí)行時(shí)間等)
它通過包裝現(xiàn)有的 JDBC 驅(qū)動(dòng)(如 MySQL JDBC 驅(qū)動(dòng)),在不修改業(yè)務(wù)代碼的情況下,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)操作的透明監(jiān)控和分析。
p6spy 和普通 MySQL 驅(qū)動(dòng)的區(qū)別
特性 | 普通 MySQL 驅(qū)動(dòng)(如 ) | p6spy |
核心功能 | 實(shí)現(xiàn)數(shù)據(jù)庫(kù)通信協(xié)議,執(zhí)行 SQL 并返回結(jié)果。 | 攔截和增強(qiáng)現(xiàn)有 JDBC 驅(qū)動(dòng)的功能,記錄 SQL 操作。 |
日志能力 | 僅支持基礎(chǔ)日志(需手動(dòng)配置,功能有限)。 | 提供詳細(xì)的 SQL 日志(含參數(shù)、執(zhí)行時(shí)間、調(diào)用棧)。 |
代碼侵入性 | 無侵入,直接使用原生驅(qū)動(dòng)。 | 無侵入,通過配置替換原生驅(qū)動(dòng)為 p6spy 驅(qū)動(dòng)。 |
性能開銷 | 低,僅處理數(shù)據(jù)庫(kù)通信。 | 有一定開銷(額外攔截和日志記錄)。 |
適用場(chǎng)景 | 生產(chǎn)環(huán)境直接操作數(shù)據(jù)庫(kù)。 | 開發(fā)/測(cè)試環(huán)境調(diào)試、性能優(yōu)化、審計(jì)。 |
p6spy 的核心價(jià)值
透明監(jiān)控
無需修改代碼,通過配置即可捕獲所有 SQL 操作
記錄完整的 SQL 語句(含動(dòng)態(tài)參數(shù))、執(zhí)行時(shí)間、連接信息等
調(diào)試與優(yōu)化
快速定位慢查詢(通過執(zhí)行時(shí)間分析)。
驗(yàn)證 SQL 參數(shù)是否正確綁定(避免 SQL 注入或邏輯錯(cuò)誤)
日志增強(qiáng)
支持格式化輸出(如 JSON、SQL 美化)
可集成日志框架(如 Log4j、SLF4J)
P6spy使用快速入門
依賴
<dependency><groupId>com.github.klboke</groupId><artifactId>p6spy-spring-boot-starter</artifactId><version>1.0</version>
</dependency>
配置文件
application.yml
指定依賴:com.p6spy.engine.spy.P6SpyDriver
spring:application:name: Kira-Test # 注意:YAML中使用冒號(hào)(:)而非等號(hào)(=)datasource:driver-class-name: com.p6spy.engine.spy.P6SpyDriverurl: jdbc:p6spy:mysql://127.0.0.1/mytestusername: rootpassword: 123456hikari:minimum-idle: 5 # 最小空閑連接數(shù)maximum-pool-size: 20 # 最大連接數(shù)idle-timeout: 60000 # 空閑連接超時(shí)時(shí)間(ms)max-lifetime: 1800000 # 連接最大存活時(shí)間(ms)connection-timeout: 20000 # 連接超時(shí)時(shí)間(ms)validation-timeout: 5000 # 驗(yàn)證查詢超時(shí)時(shí)間(ms)leak-detection-threshold: 2000 # 連接泄漏檢測(cè)閾值(ms)logging:level:com.p6spy: DEBUGp6spy: DEBUG
spy.properties
p6spy的配置文件
module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory#logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(currentTime)| SQL耗時(shí):%(executionTime) ms | 連接%(connectionId) | 執(zhí)行的SQL語句:%(category) %(sql)appender=com.p6spy.engine.spy.appender.StdoutLoggerexcludecategories=info,debug,result,batc,resultsetderegisterdrivers=truedateformat=yyyy-MM-dd HH:mm:ssdriverlist=com.p6spy.engine.spy.P6SpyDriveroutagedetection=trueoutagedetectioninterval=2
控制臺(tái)輸出的sql細(xì)節(jié)
2025-04-11 11:23:44| SQL耗時(shí):6 ms | 連接0 | 執(zhí)行的SQL語句:statement insert into t_pha_trade (json_test) VALUES ('[{"installAdsNum":3,"retentionDuration":"30","retentionStrategy":"0.6,0.52,0.5"},{"installAdsNum":5,"retentionDuration":"45","retentionStrategy":"0.7,0.6,0.55,0.5"},{"installAdsNum":2,"retentionDuration":"20","retentionStrategy":"0.5,0.45"}]')