# p6spy **Repository Path**: LevelCoder/p6spy ## Basic Information - **Project Name**: p6spy - **Description**: 该仓库拉取的是p6spy官方的源码,随着我对源码的深入学习,我将逐步分析p6spy的实现原理,以及一些源码的实现细节。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-03-09 - **Last Updated**: 2025-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 窥探p6spy的实现原理 > 该仓库拉取的是p6spy官方的源码,随着我对源码的深入学习,我将逐步分析p6spy的实现原理,以及一些源码的实现细节。 > 并且随着我学习的深入,我将逐步翻译和整理源码中的注释。 [p6spy官方源码 - Github](https://github.com/p6spy/p6spy/tree/p6spy-3.9.1) - 发行版本:3.9.1 - Java版本:1.8 ## 说明 官方仓库的构建工具使用的是Gradle,本人给换成了Maven,如果你想自己搭建一套源码测试仓库,可以参考我搭建的仓库: ### 包结构说明 ``` com.p6spy └── engine ├── common // 包含了 p6spy 的公共工具类和常量定义 ├── config // 包含了 p6spy 的配置相关类 ├── event // 包含了 p6spy 的事件相关类 ├── logging // 包含了 p6spy 的日志相关类 ├── outage // 包含了 p6spy 的故障检测相关类 ├── spy // 包含了 p6spy 的 SPI 相关类 └── wrapper // 包含了 p6spy 的包装器相关类 ``` 在这个包结构中: com.p6spy.engine 包含了 p6spy 的引擎部分,负责拦截和处理 JDBC 操作。 - com.p6spy.engine.common 包含了 p6spy 的公共工具类和常量定义。 - com.p6spy.engine.config 包含了 p6spy 的配置相关类。 - com.p6spy.engine.event 包含了 p6spy 的事件相关类。 - com.p6spy.engine.logging 包含了 p6spy 的日志相关类。 - com.p6spy.engine.outage 包含了 p6spy 的故障检测相关类。 - com.p6spy.engine.spy 包含了 p6spy 的 SPI 相关类。 - com.p6spy.engine.wrapper 包含了 p6spy 的包装器相关类。 ### 步骤一 复制出下面图示的源码到你自己模块下面 ![img.png](img/img1.png) 例如本人的,注意绿色框选出来的文件是本人自己额外加进去的文件。 ![img.png](img/img2.png) ### 步骤二 这个源码会引用到日志门面slf4j,需要手动引入slf4j的依赖。 ```xml org.slf4j slf4j-api 2.0.9 ``` 然后就是看你的数据库是什么就用对应的数据库驱动,这里我用的是mysql8.x的,so我导入了mysql8的依赖。 ```xml mysql mysql-connector-java 8.0.16 ``` 至于其它依赖我可能用到了或许将来会用到,这里就暂不列出说明... ### spy.properties 配置 这里是本人自己配置的,具体配置可以参考官方的配置说明,这里我只列一些我用到的配置。 ```properties modulelist=com.p6spy.engine.spy.P6SpyFactory,com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory logMessageFormat=com.p6spy.engine.config.P6spySqlFormat appender=com.p6spy.engine.config.StdoutLogger excludecategories=info,debug,result,batc,resultset deregisterdrivers=true dateformat=yyyy-MM-dd HH:mm:ss driverlist=com.mysql.cj.jdbc.Driver outagedetection=true outagedetectioninterval=2 ``` ## 运行测试 直接运行Client里面的main方法即可 ![img.png](img/img3.png) ## 部分源码已经翻译和整理 随着我的学习,我将会翻译更多的源码注释,这里我翻译了部分源码的注释。 ![img.png](img/img4.png)