# jdbcmon
**Repository Path**: itcraft-cn/jdbcmon
## Basic Information
- **Project Name**: jdbcmon
- **Description**: A high-performance, extensible lightweight JDBC monitoring proxy framework.
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-03
- **Last Updated**: 2026-04-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# jdbcmon
[English Version](README.md)
高性能、可扩展的轻量级 JDBC 监控代理框架。
## 特性
- **零侵入**:无需修改业务代码,通过动态代理自动包装 JDBC 对象
- **高性能**:Query 开销 < 10%,Update 开销 < 15%,功能测试场景完全适用
- **可扩展**:监听器机制支持自定义监控指标,事件体系易于定制
- **多 JDK 支持**:同时支持 JDK 8/17,JDK 17 性能更优
- **自适应阈值**:基于 P95 动态计算慢 SQL 阈值
- **大结果集检测**:支持阈值配置,多种触发策略(抛异常/立即通知/延迟通知)
## 快速开始
### Maven 依赖
```xml
cn.itcraft
jdbcmon-core
1.0.0-SNAPSHOT
```
### 基本使用
```java
import cn.itcraft.jdbcmon.config.WrappedConfig;
import cn.itcraft.jdbcmon.config.HugeResultSetAction;
import cn.itcraft.jdbcmon.wrap.WrappedDataSource;
import cn.itcraft.jdbcmon.monitor.SqlStatistics;
import javax.sql.DataSource;
WrappedConfig config = new WrappedConfig.Builder()
.slowQueryThresholdMs(500)
.logSlowQueries(true)
.hugeResultSetThreshold(2000)
.hugeResultSetAction(HugeResultSetAction.NOTIFY_IMMEDIATE)
.build();
DataSource wrappedDataSource = new WrappedDataSource(originalDataSource, config);
SqlStatistics stats = wrappedDataSource.getSqlMonitor().getStatistics();
System.out.println("总查询数: " + stats.getTotalQueries());
System.out.println("慢查询数: " + stats.getTotalSlowQueries());
```
## 多版本构建
```bash
# 构建 JDK 8 版本
export JAVA_HOME=/home/helly/lang/jdk8
mvn clean install -Pjdk8
# 构建 JDK 17 版本(推荐)
export JAVA_HOME=/home/helly/lang/jdk17
mvn clean install -Pjdk17
# 或使用构建脚本
./build.sh
```
## Spring Boot 集成
### Maven 依赖
```xml
cn.itcraft
jdbcmon-spring
1.0.0-SNAPSHOT
```
### 配置属性
```yaml
jdbcmon:
enabled: true
slow-query-threshold-ms: 1000
log-slow-queries: true
use-adaptive-threshold: true
huge-result-set-threshold: 2000
huge-result-set-action: NOTIFY_IMMEDIATE
```
## 监听器扩展
```java
import cn.itcraft.jdbcmon.listener.SqlExecutionListener;
import cn.itcraft.jdbcmon.event.MonEvent;
import cn.itcraft.jdbcmon.event.SuccessEvent;
import cn.itcraft.jdbcmon.event.FailureEvent;
import cn.itcraft.jdbcmon.event.SlowQueryEvent;
import cn.itcraft.jdbcmon.event.HugeResultSetEvent;
public class CustomListener implements SqlExecutionListener {
@Override
public void onEvent(MonEvent event) {
switch (event.getEventType()) {
case SUCCESS:
SuccessEvent success = (SuccessEvent) event;
// 处理成功执行
break;
case FAILURE:
FailureEvent failure = (FailureEvent) event;
// 处理执行失败
break;
case SLOW_QUERY:
SlowQueryEvent slow = (SlowQueryEvent) event;
// 处理慢查询
break;
case HUGE_RESULT_SET:
HugeResultSetEvent huge = (HugeResultSetEvent) event;
// 处理大结果集
break;
}
}
}
sqlMonitor.addListener(new CustomListener());
```
## 性能基准
### JDK 17(推荐)
| 场景 | Direct | Proxied | 开销 |
|------|--------|---------|------|
| PreparedQuery | 1,802,693 ops/s | 1,744,145 ops/s | **3.2%** |
| MultiRowQuery | 564,842 ops/s | 466,772 ops/s | **17.4%** |
| Insert | 788,785 ops/s | 746,455 ops/s | **5.4%** |
| Update | 551,891 ops/s | 541,953 ops/s | **1.8%** |
| ResultSet (10000行) | 4,661 ops/s | 4,124 ops/s | **11.5%** |
### JDK 8
| 场景 | Direct | Proxied | 开销 |
|------|--------|---------|------|
| PreparedQuery | 302,096 ops/s | 277,258 ops/s | **8.2%** |
| MultiRowQuery | 153,412 ops/s | 153,909 ops/s | **-0.3%** |
| Insert | 305,411 ops/s | 290,696 ops/s | **4.8%** |
| ResultSet (10000行) | 4,477 ops/s | 4,040 ops/s | **9.8%** |
### 结论
- **JDK 17 推荐使用**:吞吐量高(3-5倍于 JDK 8),代理开销稳定(1-12%)
- **JDK 8 可用**:开销 1-10%,部分场景波动较大
- **ResultSet 监控开销**:全量读取 10-12%,部分读取 < 5%
## 适用场景
| 场景 | 推荐度 | 说明 |
|------|-------|------|
| 功能测试 | ✅✅✅ | 完全适用,开销可忽略 |
| 集成测试 | ✅✅✅ | 完全适用,便于发现问题 |
| 预发布环境 | ✅✅ | 推荐使用,生产前验证 |
| 生产环境 | ✅ | 可用,建议 JDK 17,开启必要监控 |
## 核心价值
1. **零侵入** - 无需修改业务代码,透明接入
2. **低开销** - Query < 10%,符合设计目标,功能测试场景完全适用
3. **可观测** - 慢查询、大结果集、错误监控,全面覆盖
4. **可扩展** - 策略模式 + 事件体系,易于定制
## 模块结构
```
jdbcmon/
├── jdbcmon-core/ # 核心模块(JDK 8/17 双版本)
├── jdbcmon-spring/ # Spring Boot 集成(需 JDK 17+)
└── jdbcmon-test/ # 集成测试 & JMH 基准测试
```
## 许可证
MIT License