# 数据归集服务 (Data Collection Service)

基于DataX的数据归集和同步服务，提供多数据源之间的数据同步功能。

## 功能特性

- 🔗 **多数据源支持**: 支持MySQL、PostgreSQL、Oracle、SQL Server等主流数据库
- 📊 **任务管理**: 创建、配置、执行和监控数据同步任务
- ⏰ **定时调度**: 支持Cron表达式的定时任务
- 📈 **实时监控**: 任务执行进度、状态和性能指标监控
- 📝 **执行日志**: 详细的任务执行日志记录
- 🔌 **插件化**: DataX Reader/Writer插件化集成

## 技术架构

- **框架**: Spring Boot 3.x
- **数据库**: MySQL + MyBatis
- **同步引擎**: DataX
- **API**: OpenAPI 3.0 自动生成
- **架构模式**: DDD (领域驱动设计)

## 项目结构

```
src/main/java/com/datamate/collection/
├── DataCollectionApplication.java          # 应用启动类
├── domain/                                  # 领域层
│   ├── model/                              # 领域模型
│   │   ├── DataSource.java                 # 数据源实体
│   │   ├── CollectionTask.java             # 归集任务实体
│   │   ├── TaskExecution.java              # 任务执行记录
│   │   └── ExecutionLog.java               # 执行日志
│   └── service/                            # 领域服务
│       ├── DataSourceService.java
│       ├── CollectionTaskService.java
│       ├── TaskExecutionService.java
│       └── impl/                           # 服务实现
├── infrastructure/                          # 基础设施层
│   ├── config/                             # 配置类
│   ├── datax/                              # DataX执行引擎
│   │   └── DataXExecutionEngine.java
│   └── persistence/                        # 持久化
│       ├── mapper/                         # MyBatis Mapper
│       └── typehandler/                    # 类型处理器
└── interfaces/                             # 接口层
    ├── api/                                # OpenAPI生成的接口
    ├── dto/                                # OpenAPI生成的DTO
    └── rest/                               # REST控制器
        ├── DataSourceController.java
        ├── CollectionTaskController.java
        ├── TaskExecutionController.java
        └── exception/                      # 异常处理

src/main/resources/
├── mappers/                                # MyBatis XML映射文件
├── application.properties                  # 应用配置
└── ...
```

## 环境要求

- Java 17+
- Maven 3.6+
- MySQL 8.0+
- DataX 3.0+
- Redis (可选，用于缓存)

## 配置说明

### 应用配置 (application.properties)

```properties
# 服务端口
server.port=8090

# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/knowledge_base
spring.datasource.username=root
spring.datasource.password=123456

# DataX配置
datax.home=/runtime/datax
datax.python.path=/runtime/datax/bin/datax.py
datax.job.timeout=7200
datax.job.memory=2g
```

### DataX配置

确保DataX已正确安装并配置：

1. 下载DataX到 `/runtime/datax` 目录
2. 配置相关Reader/Writer插件
3. 确保Python环境可用

## 数据库初始化

执行数据库初始化脚本：

```bash
mysql -u root -p knowledge_base < scripts/db/data-collection-init.sql
```

## 构建和运行

### 1. 编译项目

```bash
cd backend/services/data-collection-service
mvn clean compile
```

这将触发OpenAPI代码生成。

### 2. 打包

```bash
mvn clean package -DskipTests
```

### 3. 运行

作为独立服务运行：
```bash
java -jar target/data-collection-service-1.0.0-SNAPSHOT.jar
```

或通过main-application统一启动：
```bash
cd backend/services/main-application
mvn spring-boot:run
```

## API文档

服务启动后，可通过以下地址访问API文档：

- Swagger UI: http://localhost:8090/swagger-ui.html
- OpenAPI JSON: http://localhost:8090/v3/api-docs

## 主要API端点

### 数据源管理

- `GET /api/v1/collection/datasources` - 获取数据源列表
- `POST /api/v1/collection/datasources` - 创建数据源
- `GET /api/v1/collection/datasources/{id}` - 获取数据源详情
- `PUT /api/v1/collection/datasources/{id}` - 更新数据源
- `DELETE /api/v1/collection/datasources/{id}` - 删除数据源
- `POST /api/v1/collection/datasources/{id}/test` - 测试连接

### 归集任务管理

- `GET /api/v1/collection/tasks` - 获取任务列表
- `POST /api/v1/collection/tasks` - 创建任务
- `GET /api/v1/collection/tasks/{id}` - 获取任务详情
- `PUT /api/v1/collection/tasks/{id}` - 更新任务
- `DELETE /api/v1/collection/tasks/{id}` - 删除任务

### 任务执行管理

- `POST /api/v1/collection/tasks/{id}/execute` - 执行任务
- `POST /api/v1/collection/tasks/{id}/stop` - 停止任务
- `GET /api/v1/collection/executions` - 获取执行历史
- `GET /api/v1/collection/executions/{executionId}` - 获取执行详情
- `GET /api/v1/collection/executions/{executionId}/logs` - 获取执行日志

### 监控统计

- `GET /api/v1/collection/monitor/statistics` - 获取统计信息

## 开发指南

### 添加新的数据源类型

1. 在 `DataSource.DataSourceType` 枚举中添加新类型
2. 在 `DataXExecutionEngine` 中添加对应的Reader/Writer映射
3. 更新数据库表结构和初始化数据

### 自定义DataX插件

1. 将插件放置在 `/runtime/datax/plugin` 目录下
2. 在 `DataXExecutionEngine` 中配置插件映射关系
3. 根据插件要求调整配置模板

### 扩展监控指标

1. 在 `StatisticsService` 中添加新的统计逻辑
2. 更新 `CollectionStatistics` DTO
3. 在数据库中添加相应的统计表或字段

## 故障排查

### 常见问题

1. **DataX执行失败**
   - 检查DataX安装路径和Python环境
   - 确认数据源连接配置正确
   - 查看执行日志获取详细错误信息

2. **数据库连接失败**
   - 检查数据库配置和网络连通性
   - 确认数据库用户权限

3. **API调用失败**
   - 检查请求参数格式
   - 查看应用日志获取详细错误信息

### 日志查看

```bash
# 应用日志
tail -f logs/data-collection-service.log

# 任务执行日志
curl http://localhost:8090/api/v1/collection/executions/{executionId}/logs
```

## 贡献指南

1. Fork项目
2. 创建特性分支: `git checkout -b feature/new-feature`
3. 提交更改: `git commit -am 'Add new feature'`
4. 推送分支: `git push origin feature/new-feature`
5. 提交Pull Request

## 许可证

MIT License
