# compents
**Repository Path**: cc-projects/compents
## Basic Information
- **Project Name**: compents
- **Description**: 组件库
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-23
- **Last Updated**: 2026-07-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# compents
> Spring Boot Starter 组件库 — 多模块 Maven 工程
基于 Spring Boot 3.2.x / JDK 17(**同时支持 Spring Boot 2.7**),遵循 Spring Boot 官方 Starter 规范编写的自定义组件库。每个组件按官方约定拆分为 **autoconfigure** + **starter** 两个模块,支持按需引入、独立发布。
## Spring Boot 版本兼容
| Spring Boot 版本 | 命名空间 | 引用方式 | 自动装配机制 |
|-----------------|---------|---------|-------------|
| 3.x(默认) | jakarta | 默认坐标 | `AutoConfiguration.imports` |
| 2.7 | javax | `-sb27` 制品 | `spring.factories` |
**SB 3.x 使用方**(默认):
```xml
com.cc.compents
compents-mock-spring-boot-starter
```
**SB 2.7 使用方**:使用 `-Psb27` 构建产出的 javax 制品(构建方执行 `mvn clean install -Psb27`,产出 jar finalName 带 `-sb27` 后缀)。jakarta/javax 命名空间分裂使同一字节码无法跑两版本,故通过 Maven profile 产出双制品。
## 文档导航
| 文档 | 面向 | 内容 |
|------|------|------|
| **[ARCHITECTURE.md](ARCHITECTURE.md)** | 维护者 / 贡献者 | 架构设计与可复用模式(级联装配、prod 守卫、optional 策略、SpEL 安全、能力诊断、热刷新、异常传播) |
| **[CONTRIBUTING.md](CONTRIBUTING.md)** | 贡献者 | 新增组件流程、自动装配规范、测试规范、代码风格 |
| [compents-log README](compents-log-spring-boot-autoconfigure/README.md) | 使用方 | 请求日志增强:路径过滤、慢请求标记 |
| [compents-mock README](compents-mock-spring-boot-autoconfigure/README.md) | 使用方 | 接口/方法 mock:HTTP/Feign/方法三类,SpEL 条件、配置刷新、抛异常 |
| [compents-backup README](compents-backup-spring-boot-autoconfigure/README.md) | 使用方 | 表级数据备份:全量/增量、幂等模式、事务隔离 |
## 内置组件
| 组件 | 功能 |
|---|---|
| **log** | HTTP 请求日志增强:通过 `HandlerInterceptor` 记录每个请求的 method/URI/状态码/耗时,支持路径过滤(include/exclude)与慢请求 WARN 标记。 |
| **mock** | 接口/方法 mock:HTTP 接口、OpenFeign 调用、Java 方法三类桩化,支持 SpEL 参数条件匹配与配置中心实时刷新。仅 dev/test 等非生产 profile 生效。 |
| **backup** | 同数据源表级数据备份:配置驱动「源表→目标表」搬运,支持全量/增量、三种幂等模式(none/delete-insert/upsert)、独立事务失败隔离、配置中心实时刷新。定时任务由业务系统驱动,模块开放 BackupExecutor/BackupPositionStore 扩展点。仅非 prod profile 生效。 |
---
## 模块结构
```
compents (pom, 父 POM)
├── compents-dependencies ← BOM:统一管理所有组件版本
├── compents-log-spring-boot-autoconfigure ← log 组件:自动装配实现
├── compents-log-spring-boot-starter ← log 组件:空 jar,依赖聚合
├── compents-mock-spring-boot-autoconfigure ← mock 组件:自动装配实现
├── compents-mock-spring-boot-starter ← mock 组件:空 jar,依赖聚合
├── compents-backup-spring-boot-autoconfigure ← backup 组件:自动装配实现
├── compents-backup-spring-boot-starter ← backup 组件:空 jar,依赖聚合
└── compents-test ← 聚合测试模块:单元 + 集成测试 + 覆盖率(不发布制品)
```
命名遵循官方约定:第三方 starter 为 `xxx-spring-boot-starter`,自动装配为 `xxx-spring-boot-autoconfigure`。装配注册使用 SB3 的 `META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`。
---
## 业务方如何引入
### 1. 引入 BOM 统一版本
```xml
com.cc.compents
compents-dependencies
1.0.0-SNAPSHOT
pom
import
```
### 2. 按需引入组件 starter
```xml
com.cc.compents
compents-log-spring-boot-starter
```
各组件的详细配置与使用示例见对应的模块 README(见上方文档导航)。
### 快速示例:log 配置
```yaml
compents:
log:
enabled: true # 总开关
prefix: "[compents-log]" # 日志前缀
request:
enabled: true # 请求日志开关
include-paths: ["/api/**"] # 仅记录这些路径;为空则记录全部
exclude-paths: ["/actuator/**", "/favicon.ico"] # 不记录这些路径(优先级高)
slow-request-threshold: 1s # 慢请求阈值,超过则 WARN 级别标记
```
**效果**:
```
INFO [compents-log] GET /api/users -> status=200 (45ms)
WARN [compents-log] SLOW POST /api/export -> status=200 (2350ms, threshold=1000ms)
```
### 快速示例:backup 使用
```yaml
compents:
backup:
rules:
- id: order-archive
source-table: t_order
target-table: t_order_bak
condition: "status = 1"
mode: full
idempotent-mode: delete-insert
order: 0
```
```java
@Autowired
private BackupService backupService;
@Scheduled(cron = "0 0 2 * * ?")
public void dailyBackup() {
BackupSummary summary = backupService.execute();
if (!summary.isOverallSuccess()) {
log.warn("部分规则失败: {}", summary.getFailedCount());
}
}
```
更多用法(增量备份、幂等模式、扩展点)见 [backup README](compents-backup-spring-boot-autoconfigure/README.md)。
---
## 如何新增一个组件
详见 **[CONTRIBUTING.md](CONTRIBUTING.md)** 的「新增组件流程」(6 步法:复制模块 → 改 pom → 编写装配类 → 注册 imports → 配置元数据 → BOM 登记双处)。
---
## 构建
### 构建并跳过测试(发布场景)
```bash
mvn clean install -DskipTests
```
### 构建并运行测试(含覆盖率报告)
```bash
mvn clean install
```
测试与覆盖率收集在 `compents-test` 模块进行:
| 场景 | 命令 |
|---|---|
| 仅跑测试模块测试 | `mvn clean test -pl compents-test` |
| 跳过覆盖率门禁只看报告 | `mvn clean verify -pl compents-test -Djacoco.skip=true` |
覆盖率报告产物:`compents-test/target/site/jacoco/index.html`(HTML)/ `jacoco.csv`(机器可读)。
`mvn verify` 会触发 `jacoco:check`,要求 compents 包行覆盖率 ≥ 80%。
测试分层与覆盖率归因机制详见 [CONTRIBUTING.md](CONTRIBUTING.md#测试规范)。
环境要求:JDK 17+、Maven 3.6+。