# export_task **Repository Path**: springcloud-zhj/export_task ## Basic Information - **Project Name**: export_task - **Description**: 导出任务管理中心是一个基于Spring Boot和Vue.js的分布式任务调度系统,专注于处理大规模数据导出任务。具备高并发、高性能和高可靠性特点,适用于企业级数据导出场景。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-01-22 - **Last Updated**: 2026-02-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 导出任务管理中心 ## 项目概述 导出任务管理中心是一个基于Spring Boot和Vue.js的分布式任务调度系统,专注于处理大规模数据导出任务。系统采用微服务架构,具备高并发、高性能和高可靠性特点,适用于企业级数据导出场景。 ## 核心功能 ### 任务调度管理 - 分布式任务调度能力 - 支持定时任务和手动触发 - 任务状态实时监控 - 任务执行历史追踪 ### 数据导出功能 - 支持多种数据源导出 - Excel格式导出(支持大文件分片处理) - 配置化导出模板 - 批量数据导出优化 ### 管理后台 - 直观的Web管理界面 - 任务配置管理 - 实时监控和统计 ### 安全特性 - 防止SSRF攻击的URL验证 - 参数注入防护 - 安全的文件访问控制 ## 技术架构 ### 后端技术栈 - **Spring Boot 2.7.18** - 应用框架 - **MyBatis-Plus** - ORM框架 - **Apache POI** - Excel处理 - **MySQL** - 数据存储 - **Druid** - 数据库连接池 - **Hutool** - 工具库 - **Fastjson** - JSON处理 - **JSONPath** - JSON路径查询 ### 前端技术栈 - **Vue 3** - 前端框架 - **Element Plus** - UI组件库 - **ECharts** - 数据可视化 - **Axios** - HTTP客户端 - **Bootstrap** - 响应式布局 ## 系统特性 ### 高性能 - 采用流式处理,支持大数据量导出 - 异步任务处理机制 - 分片导出避免内存溢出 - 线程池优化并发处理 ### 高可用 - 任务容错和自动恢复 - 断点续传支持 - 失败任务重试机制 - 事务一致性保证 ### 易用性 - 可视化配置界面 - 任务状态实时反馈 - 详细的执行日志 - 直观的监控面板 ### 灵活性 - 支持多种数据格式解析 - 可配置的数据路径映射 - 动态API响应结构适配 ## 快速开始 ### 环境要求 - JDK 1.8+ - Maven 3.6+ - MySQL 5.7+ - Node.js 14+ - npm 或 yarn ### 初始化数据库 ```bash # 执行数据库初始化脚本 mysql -u root -p < 20260116.sql ``` ### 后端启动 ```bash # 进入项目目录 cd export_task # 编译打包 mvn clean package # 启动应用 mvn spring-boot:run ``` ### 前端启动 ```bash # 进入前端目录 cd frontend_vue # 安装依赖 npm install # 启动开发服务器 npm run serve ``` ## 配置说明 ### 数据库配置 修改 [src/main/resources/application.yml](file:///Users/zhanghuajie/IdeaProjects/base/export_task/src/main/resources/application.yml) 文件中的数据库连接信息: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/export_data?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: zhj123456 driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource ``` ### 导出配置 ```yaml export: enable-event: false # 是否启用事件驱动模式 file: base-path: ${user.dir}/data/export # 导出文件存储路径 expire-days: 7 # 文件过期天数 ``` ### 服务配置 ```yaml server: port: 8089 # 服务端口 servlet: context-path: /export # 上下文路径 tomcat: max-threads: 200 # 最大线程数 min-spare-threads: 10 # 最小空闲线程数 connection-timeout: 30000 # 连接超时时间 ``` ### 日志配置 ```yaml logging: level: com.zhj.mapper: DEBUG org.springframework.web: INFO org.apache.poi: WARN file: name: logs/export-service.log logback: rolling policy: max-file-size: 10MB max-history: 30 ``` ## API 接口 ### 任务管理接口 - `POST /api/export/create` - 创建导出任务 - `GET /api/export/status/{id}` - 查询任务状态 - `GET /api/export/download/{id}` - 下载导出文件 - `POST /api/export/callback` - 任务回调接口 ### 管理接口 - `GET /api/admin/tasks` - 获取任务列表 - `GET /api/admin/task/{id}` - 获取任务详情 - `GET /api/admin/configs` - 获取配置列表 - `GET /api/admin/config/{id}` - 获取配置详情 - `POST /api/admin/config` - 创建配置 - `PUT /api/admin/config/{id}` - 更新配置 - `DELETE /api/admin/config/{id}` - 删除配置 - `POST /api/admin/retry/{id}` - 重试失败任务 - `GET /api/admin/stats` - 获取任务统计信息 - `GET /api/admin/task-trend` - 获取任务趋势 - `GET /api/admin/task-status-distribution` - 获取任务状态分布 - `GET /api/admin/system-info` - 获取系统信息 - `GET /api/admin/recent-tasks` - 获取最近任务 - `GET /api/admin/config-stats` - 获取配置统计 - `DELETE /api/admin/tasks` - 批量删除任务 ### 请求示例 #### 创建导出任务 ```bash curl -X POST \ "http://localhost:8089/export/api/export/create?configCode=user_export" \ -H "Content-Type: application/json" \ -H "X-User-Id: 123" \ -H "X-User-Name: admin" \ -d '{"startDate": "2023-01-01", "endDate": "2023-12-31"}' ``` #### 查询任务状态 ```bash curl -X GET \ "http://localhost:8089/export/api/export/status/1" ``` #### 下载导出文件 ```bash curl -X GET \ "http://localhost:8089/export/api/export/download/1" \ -o exported_file.xlsx ``` ## 使用指南 ### 创建导出配置 1. 登录管理后台 2. 进入"配置管理"页面 3. 点击"新增配置"按钮 4. 填写配置信息(配置编码、模块名称、API地址等) 5. 设置数据格式(dataFormat)和数据路径映射(dataPathMapping) 6. 保存配置 ### 数据路径映射配置说明 数据路径映射使用JSONPath语法,用于指定如何从API响应中提取数据: - `$.result.records` - 从响应的result字段下的records数组提取数据 - `$.data` - 从响应的data字段提取数据 - `$.list` - 从响应的list字段提取数据 - `$` - 使用整个响应作为数据源 例如,对于以下API响应: ```json { "code": 200, "message": "success", "result": { "records": [ {"id": 1, "name": "张三"}, {"id": 2, "name": "李四"} ], "total": 2 } } ``` 应配置 `dataPathMapping` 为 `$.result.records` ### 数据格式说明 - `standard`: 标准格式,按照默认的返回结构处理数据 - `raw`: 原始格式,直接使用API返回的数据 - `custom`: 自定义格式,可通过扩展transformCustomFormat方法进行特殊处理 ### 执行导出任务 1. 在配置管理页面找到对应配置 2. 点击"执行"按钮 3. 填写查询参数 4. 确认执行 5. 在任务管理页面查看执行状态 ### 任务状态说明 - `0`: 待处理 - `1`: 处理中 - `2`: 已完成 - `3`: 已失败 ### 大文件处理策略 当数据量超过5000条时,系统会自动将数据分割成多个Excel文件,并打包为ZIP格式以避免内存溢出。 ## 部署说明 ### 生产环境部署 ```bash # 打包应用 mvn clean package # 启动应用 java -jar export_task-1.0-SNAPSHOT.jar ``` ### Docker部署(可选) ```bash # 构建Docker镜像 docker build -t export-task # 运行容器 docker run -d -p 8089:8089 --name export-center export-task ``` ### 访问地址 - 管理后台:[http://localhost:8089/export/](http://localhost:8089/export/) ## 目录结构 ``` export_task/ ├── src/main/java/com/zhj/ # 后端源码 │ ├── config/ # 配置类 │ ├── constant/ # 常量定义 │ ├── controller/ # 控制器层 │ ├── dto/ # 数据传输对象 │ ├── entity/ # 实体类 │ ├── event/ # 事件处理 │ ├── exception/ # 异常处理 │ ├── mapper/ # 数据访问层 │ ├── req/ # 请求对象 │ ├── service/ # 服务层 │ ├── util/ # 工具类 │ ├── vo/ # 视图对象 │ └── ExportTaskApp.java # 启动类 ├── src/main/resources/ # 资源文件 │ ├── static/ # 静态资源 │ └── application.yml # 配置文件 ├── frontend_vue/ # 前端项目 │ ├── public/ # 公共资源 │ ├── src/ # 源代码 │ │ ├── api/ # API接口 │ │ ├── assets/ # 静态资源 │ │ ├── router/ # 路由配置 │ │ ├── store/ # 状态管理 │ │ ├── utils/ # 工具函数 │ │ └── views/ # 页面组件 │ ├── package.json # 依赖配置 │ └── vue.config.js # Vue配置 ├── 20260116.sql # 数据库脚本 ├── pom.xml # 项目依赖配置 └── README.md # 项目说明 ``` ## 开发指南 ### 新增功能模块 1. 在entity包中定义实体类 2. 在mapper包中定义数据访问接口 3. 在service包中实现业务逻辑 4. 在controller包中定义API接口 5. 在前端views目录中添加页面 ### 扩展导出类型 1. 修改ExportDataConfig实体类 2. 扩展ExcelUtil工具类 3. 更新导出服务逻辑 4. 前端页面适配 ### 添加新的事件类型 1. 在event包中扩展事件处理逻辑 2. 修改application.yml中的export.enable-event配置 3. 实现相应的回调处理 ### 添加数据格式支持 1. 在ExportDataConfig实体类中设置dataFormat字段 2. 在ExcelExportService中扩展processDataByFormat方法 3. 添加特定格式的数据转换逻辑 ### 配置数据路径映射 1. 在ExportDataConfig实体类中设置dataPathMapping字段 2. 通过JSONPath语法指定数据提取路径 3. 系统将根据配置自动解析API响应结构 ## 性能优化 ### 大文件处理 - 采用SXSSFWorkbook处理大数据量 - 实现分片导出避免内存溢出 - 支持ZIP压缩输出 - 流式处理减少内存占用 ### 并发处理 - 使用线程池管理导出任务 - 异步处理提高响应速度 - 数据库连接池优化 - 并发控制防止资源竞争 ### 系统优化 - 合理的分页查询 - 数据缓存策略 - 文件定期清理 - 内存监控与管理 ## 安全措施 ### 输入验证 - URL安全验证,防止SSRF攻击 - 参数过滤,防止SQL注入 - 文件路径验证,防止路径穿越 ## 监控与运维 ### 系统监控 - 任务执行状态监控 - 系统资源使用监控 - 错误日志收集分析 - 性能指标跟踪 ### 文件管理 - 导出文件定期清理 - 存储空间监控 - 文件完整性校验 ## 故障排除 ### 常见问题 1. 数据库连接失败 - 检查连接配置 2. 导出任务卡住 - 检查线程池配置 3. 内存溢出 - 调整JVM参数和分片大小 4. 文件下载失败 - 检查文件路径和权限 5. API调用失败 - 检查URL格式和网络连接 6. JSON解析错误 - 检查日期时间格式配置 7. 数据路径映射错误 - 检查JSONPath语法和API响应结构 ### 调试方法 - 启用DEBUG日志 - 检查数据库连接池状态 - 监控系统资源使用情况 - 检查线程池队列状态 ### 性能调优 - 调整线程池参数 - 优化数据库查询 - 调整JVM内存参数 - 优化文件I/O操作 ## 扩展功能 ### 集群部署 系统支持集群部署,通过数据库保证任务状态的一致性。在集群环境中,建议使用Redis实现分布式锁,确保任务不会被重复执行。 ### 文件存储扩展 系统默认将文件存储在本地磁盘,可以根据需要扩展到云存储服务(如阿里云OSS、AWS S3等)。 ### 数据格式扩展 系统支持多种数据格式解析,通过ExportDataConfig实体类的dataFormat字段可以指定数据解析格式: - standard: 标准格式 - raw: 原始格式 - custom: 自定义格式(可扩展) ### 数据路径映射 系统支持灵活的数据路径映射,通过ExportDataConfig实体类的dataPathMapping字段可以指定JSONPath表达式来提取API响应中的数据: - 支持复杂的嵌套结构解析 - 支持数组和对象的提取 - 支持通配符和条件筛选 ## 贡献指南 欢迎提交Issue和Pull Request来改进项目。请遵循以下准则: 1. 提交Issue前,请搜索是否已有相关问题 2. 提交代码前,请确保代码风格与项目一致 3. 添加必要的单元测试 4. 更新相关文档 ## 许可证 本项目采用 Apache 2.0 许可证。 ## 联系方式 如有问题请联系开发团队。