# 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 的包装器相关类。
### 步骤一
复制出下面图示的源码到你自己模块下面

例如本人的,注意绿色框选出来的文件是本人自己额外加进去的文件。

### 步骤二
这个源码会引用到日志门面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方法即可

## 部分源码已经翻译和整理
随着我的学习,我将会翻译更多的源码注释,这里我翻译了部分源码的注释。
