# trace-spring-boot-starter
**Repository Path**: sunlightwang/trace-spring-boot-starter
## Basic Information
- **Project Name**: trace-spring-boot-starter
- **Description**: trace-spring-boot-starter 是一个轻量级的分布式链路追踪组件,基于 Spring Boot 自动配置机制开发。该组件可以为每个请求生成唯一的 Trace ID(追踪 ID),并在 HTTP、Feign、Dubbo 等多种调用链路中自动传递,帮助开发者快速定位跨服务调用问题。
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-04-15
- **Last Updated**: 2026-04-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# trace-spring-boot-starter
## 介绍
`trace-spring-boot-starter` 是一个轻量级的分布式链路追踪组件,基于 Spring Boot 自动配置机制开发。该组件可以为每个请求生成唯一的 Trace ID(追踪 ID),并在 HTTP、Feign、Dubbo 等多种调用链路中自动传递,帮助开发者快速定位跨服务调用问题。
## 软件架构
```
trace-spring-boot-starter
├── core # 核心模块
│ ├── annotation # 注解定义
│ │ └── EnableTrace # 启用 Trace 功能注解
│ ├── config # 自动配置
│ │ ├── TraceAutoConfiguration # 主自动配置类
│ │ └── TraceWebAutoConfiguration
│ ├── filter # 过滤器
│ │ ├── TraceFilter # HTTP 请求过滤器
│ │ └── DubboTraceFilter # Dubbo RPC 过滤器
│ ├── generator # Trace ID 生成器
│ │ ├── TraceIdGenerator # 生成器接口
│ │ ├── UuidTraceIdGenerator # UUID 生成策略
│ │ ├── SnowflakeTraceIdGenerator # 雪花算法生成策略
│ │ └── RedisTraceIdGenerator # Redis 生成策略(预留)
│ ├── interceptor # 拦截器
│ │ └── FeignTraceInterceptor # Feign 客户端拦截器
│ ├── properties # 配置属性
│ │ └── TraceProperties # Trace 配置属性类
│ ├── util # 工具类
│ │ └── TraceUtils # Trace 工具类
│ ├── TraceApplication # 应用入口
│ └── TraceContext # Trace 上下文管理
```
## 功能特性
- **自动 Trace ID 生成**:支持 UUID、雪花算法等多种生成策略
- **HTTP 请求追踪**:自动在请求头中传递 Trace ID
- **Feign 客户端追踪**:支持 Spring Cloud OpenFeign 调用链追踪
- **Dubbo RPC 追踪**:支持 Dubbo 微服务调用链追踪
- **线程池传递**:支持在异步线程中保持 Trace ID 上下文
- **MDC 集成**:与 SLF4J MDC 无缝集成,方便日志追踪
- **Spring Boot 自动配置**:开箱即用,支持条件化配置
## 技术栈
- Java 8+
- Spring Boot 2.7.x
- Spring Cloud OpenFeign
- Apache Dubbo 2.7.x
- SLF4J
## 快速开始
### 1. 添加依赖
```xml
com.common.trace.core
trace-spring-boot-starter
1.0-SNAPSHOT
```
### 2. 启用 Trace 功能
在 Spring Boot 启动类上添加 `@EnableTrace` 注解:
```java
import com.common.trace.core.annotation.EnableTrace;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableTrace
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
### 3. 配置参数(可选)
在 `application.yml` 或 `application.properties` 中配置:
```yaml
trace:
# 是否启用追踪,默认 true
enabled: true
# Trace ID 生成策略:UUID, SNOWFLAKE(预留:REDIS)
generator: UUID
# HTTP 请求头名称
header-name: X-Trace-Id
# Feign 调用追踪,默认 true
feign:
enabled: true
# Dubbo 调用追踪,默认 true
dubbo:
enabled: true
```
雪花算法配置(当 `generator: SNOWFLAKE` 时):
```yaml
trace:
generator: SNOWFLAKE
snowflake-worker-id: 1
snowflake-datacenter-id: 1
```
## 使用说明
### 获取当前 Trace ID
在业务代码中可以通过 `TraceContext` 获取当前请求的 Trace ID:
```java
import com.common.trace.core.TraceContext;
// 获取当前请求的 Trace ID
String traceId = TraceContext.getTraceId();
```
### 在日志中输出 Trace ID
由于集成了 MDC,可以直接在日志配置中使用 `%X{traceId}` 占位符:
```xml
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n
```
### 异步线程支持
`TraceContext` 提供了 `wrap` 方法来支持在线程池中传递 Trace ID:
```java
import com.common.trace.core.TraceContext;
// 包装 Runnable
Runnable wrappedTask = TraceContext.wrap(() -> {
// 在新线程中自动获取父线程的 Trace ID
String traceId = TraceContext.getTraceId();
// 业务逻辑
});
executor.execute(wrappedTask);
// 包装 Callable
Callable wrappedCallable = TraceContext.wrap(() -> {
return TraceContext.getTraceId();
});
```
## 工作原理
### HTTP 请求流程
1. 请求进入 `TraceFilter`
2. 检查请求头中是否存在 `X-Trace-Id`
3. 存在则使用原有 ID,不存在则生成新的 Trace ID
4. 将 Trace ID 存入 `TraceContext` 和 MDC
5. 将 Trace ID 添加到响应头返回
6. 请求完成后清除上下文
### Feign 调用流程
1. `FeignTraceInterceptor` 在请求发送前拦截
2. 从 `TraceContext` 获取当前 Trace ID
3. 将 Trace ID 添加到 Feign 请求头
4. 调用下游服务
### Dubbo 调用流程
1. 消费者端:将 Trace ID 放入 RPC 上下文附件
2. 服务提供者端:从 RPC 上下文附件获取 Trace ID
3. 设置到 `TraceContext` 供业务使用
## 贡献指南
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
## 许可证
MIT License