# Cc_ETL **Repository Path**: xzjsccz/Cc_ETL ## Basic Information - **Project Name**: Cc_ETL - **Description**: Cc-ETL 是一款基于 XXL-Job 深度改造的可视化定时任务调度平台,专为数据集成和任务编排而设计。平台通过可视化拖拽界面实现复杂任务流程的编排,支持多种任务类型,并深度集成 DataX 实现高效的数据同步能力。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: release - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 117 - **Forks**: 52 - **Created**: 2024-11-02 - **Last Updated**: 2026-09-26 ## Categories & Tags **Categories**: task-schedule **Tags**: xxl-job, SpringBoot, Java ## README # Cc-ETL

Java Version Spring Boot Version License Platform

基于 XXL-Job 的可视化任务调度与数据集成平台

拖拽式任务编排 · DataX 数据同步 · JavaFX 桌面管理端

Cc-ETL 在 [XXL-Job](https://github.com/xuxueli/xxl-job) 基础上深度改造,提供**可视化定时任务调度**与**多数据源集成**能力:通过拖拽画布编排任务依赖,支持 11 种运行模式,并集成 [DataX](https://github.com/alibaba/DataX) 实现数据库间全量/增量同步,适合企业 ETL、运维自动化与数据中台等场景。 > 适合「不想上 Airflow + DolphinScheduler + Kettle 全套,但又需要可视化 DAG、定时调度、多数据源同步」的团队。 **项目当前处于测试阶段,部分功能仍在开发与优化中,欢迎下载学习使用。** | 链接 | 地址 | |------|------| | GitHub | https://github.com/xiaozhaoCcz/CC_ETL | | Gitee | https://gitee.com/xzjsccz/Cc_ETL | | 在线文档 | http://175.178.249.190/blog/post/298 | | 演示视频 | [Bilibili 在线观看](https://www.bilibili.com/video/BV1TBCkBzEex/) | --- ## 目录 - [一、核心功能](#一核心功能) - [二、典型使用场景](#二典型使用场景) - [三、系统架构](#三系统架构) - [四、项目展示](#四项目展示) - [五、快速开始](#五快速开始) - [六、模块说明](#六模块说明) - [七、技术栈](#七技术栈) - [八、文档与常见问题](#八文档与常见问题) - [九、发展规划](#九发展规划) - [十、贡献与支持](#十贡献与支持) --- ## 一、核心功能 ### 1. 可视化任务编排 | 能力 | 说明 | |------|------| | **拖拽画布** | 节点连线、拓扑排序自动解决执行顺序,支持串行/并行、循环依赖检测 | | **条件分支** | 支持 IF 条件节点,按表达式路由下游分支 | | **局部调试** | 通过节点状态(开始/终止/忽略/阻塞)裁剪执行范围,无需单独开发调试入口 | | **参数传递** | 任务间通过 `#{任务名}.属性` 语法引用上游执行结果 | | **实时反馈** | 执行状态、日志流式展示,小地图导航,多面板布局 | | **编排执行器** | 独立 Compose 执行器按依赖顺序触发下游任务,与 Admin 调度无缝配合 | 适用于:多步骤流水线、有依赖的批处理、ETL 多阶段流程。 ### 2. 任务调度 - 兼容 **XXL-Job**:Cron 表达式、动态增删改任务、多种路由与阻塞策略 - **失败策略**:失败重试、告警、忽略等可配置 - **超时与重试**:单任务超时时间、重试次数独立配置 - **告警通知**:邮件、Webhook,可对接钉钉/飞书/企业微信 适用于:定时报表、定时同步、定时巡检、补数重跑等。 ### 3. 数据集成(DataX) - **多数据源**:MySQL、Oracle、PostgreSQL 等,可扩展 - **同步方式**:全量、增量、条件过滤,通过 JSON 配置即可 - **与编排结合**:可将「数据同步」作为编排中的一环,前后接清洗、转换或推送 > ⚠️ PC 端 DataX 配置与执行界面正在持续更新中。 适用于:库到库同步、数仓 ODS 层接入、跨库数据迁移。 ### 4. 多任务类型(11 种运行模式) | 类型 | 说明 | 典型用途 | |------|------|----------| | **Bean** | Spring Bean 方法调用 | 业务逻辑、内部服务调用 | | **API** | HTTP 请求 | 调用第三方接口、内部微服务 | | **SQL** | 执行 SQL 脚本 | 数据清洗、统计、归档 | | **DataX** | DataX 同步任务 | 数据库/表同步 | | **GLUE(Java)** | 在线 Java 脚本 | 自定义逻辑、快速验证 | | **GLUE(Shell)** | Shell 脚本 | 运维脚本、文件处理 | | **GLUE(Python/PHP/Nodejs/PowerShell/C#)** | 多语言脚本 | 一次性任务、多语言扩展 | 适用于:混合编排(例如先 API 拉数 → SQL 清洗 → DataX 入仓 → Shell 发通知)。 ### 5. 监控与运维 - **执行记录**:每次触发的开始/结束时间、状态、耗时 - **日志查看**:控制台日志、执行日志持久化与检索 - **Dashboard**:任务运行概览与健康状态 - **告警**:邮件、Webhook 通知,便于对接钉钉/飞书等 适用于:任务失败排查、性能分析、值班告警。 ### 6. 权限管控 - **角色与权限**:按角色划分任务、执行器、数据源等资源的访问与操作权限 - **操作审计**:关键操作可追溯,便于企业合规与安全管控 - **任务审批**:支持任务变更审批流程(开发中) 适用于:多团队共用平台、生产环境隔离、敏感任务与数据源管控。 ### 7. 版本管理 - **配置版本**:任务、编排、数据源等配置支持版本记录与回溯 - **变更追溯**:可查看历史版本、对比差异、按需回滚,降低误改风险 适用于:任务配置变更审计、上线前回滚、多环境配置管理。 ### 8. PC 端(JavaFX) - **离线使用**:不依赖浏览器,树形视图、画布、小地图、日志面板一体化 - **高级配置**:路由策略、阻塞处理、失败策略、超时、重试等与 Admin 一致 - **交互体验**:撤销/重做、快捷键、面板可展开/收起/弹出独立窗口 - **质量保障**:功能经 489 个测试用例覆盖,详见 [GUI 功能测试文档](doc/测试文档/GUI功能测试文档.md) --- ## 二、典型使用场景 ### 场景一:数据仓库 ETL 流程 ``` 业务库 ──DataX──▶ ODS ──SQL/Bean──▶ DWD/DWS ──API/Shell──▶ 报表/推送 ``` - 使用 **DataX** 将业务库(MySQL/Oracle 等)全量或增量同步到 ODS 层 - 使用 **SQL** 或 **Bean** 任务做清洗、维度关联、指标计算 - 使用 **编排** 将「同步 → 清洗 → 加载」串成一条流水线,按依赖顺序执行 - 可选:最后接 **API** 或 **Shell** 推送报表或触发下游系统 **价值**:可视化配置、减少手写脚本,便于交接与审计。 ### 场景二:业务报表与数据推送 **流程**:`定时统计/汇总 → 生成报表或文件 → 邮件/Webhook 推送` - 使用 **SQL** 或 **Bean** 做日/周/月统计 - 使用 **Shell** 生成 Excel/CSV 或调用报表服务 - 使用 **API** 或 **邮件/Webhook** 将结果推送给业务或领导 **价值**:定时自动化,减少人工取数、发邮件。 ### 场景三:系统运维自动化 **流程**:`日志清理/备份 → 健康检查 → 异常告警` - 使用 **Shell** 做日志切割、归档、备份脚本 - 使用 **API** 或 **Bean** 调用健康检查接口,判断服务状态 - 配置 **失败告警**、**邮件/Webhook**,异常时及时通知 **价值**:例行维护自动化,故障早发现、早处理。 ### 场景四:第三方 API 数据集成 **流程**:`定时调用第三方 API → 解析落库 → 与内部数据联动` - 使用 **API** 任务定时拉取第三方数据(RESTful/SOAP 等) - 使用 **Bean** 或 **SQL** 解析、清洗并写入本地库 - 需要时可与 **DataX**、**SQL** 等组合,参与数仓或报表链路 **价值**:统一在平台内管理外部数据接入,可编排、可监控。 ### 场景五:学习与二次开发 - **任务调度**:学习分布式调度、Cron、任务依赖与拓扑编排 - **数据集成**:学习 DataX、多数据源 ETL 设计 - **桌面应用**:JavaFX 界面、多模块 Spring Boot 架构,可作为企业级桌面端参考 更多扩展方向见 [功能扩展规划](doc/Cc-ETL功能扩展规划.md)。 --- ## 三、系统架构 ``` ┌─────────────┐ REST / WebSocket ┌──────────────┐ │ cc-job-gui │ ◀──────────────────────▶ │ cc-job-admin │ ◀── Cron 调度 │ (JavaFX) │ │ 调度中心 │ └─────────────┘ └──────┬───────┘ │ ┌──────────────────────┼──────────────────────┐ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ cc-job-executor │ │executor-compose │ │ MySQL │ │ 单任务执行器 │ │ 编排执行器 │ │ 配置持久化 │ │ Bean/API/SQL/ │ │ 拓扑排序+依赖 │ └─────────────┘ │ Shell/DataX/GLUE│ │ 触发下游任务 │ └─────────────────┘ └─────────────────┘ ``` **数据流**:PC 端配置 → 持久化到 MySQL → Admin 调度 → Executor 执行 → 状态与日志回传展示 | 组件 | 职责 | |------|------| | **Admin** | 任务与执行器注册、Cron 调度触发、监控、REST API | | **Executor** | 执行 Bean/API/SQL/Shell/DataX/GLUE 等单任务,回调状态与日志 | | **Executor-Compose** | 任务组编排执行,拓扑排序、条件分支、参数上下文传递 | | **GUI** | JavaFX 桌面端,任务设计、画布编排、日志与监控 | | **cc-job-xo** | 数据实体、Mapper 与持久层,Admin 与 GUI 共用 | | **cc-job-core** | XXL-Job 调度与执行核心,Glue 引擎、Handler 框架 | --- ## 四、项目展示 ### 界面预览 #### PC 端主界面
PC端主界面
#### 任务列表与编辑
任务列表与编辑
#### 数据源同步
数据源同步
#### 任务类型示例(API / Shell / Java / C# / Sql / Bean / Datax)
Api任务 Shell任务
Java任务 CSharp任务
Sql任务 Datax任务
### 使用流程 1. **环境搭建**:配置数据库与后端,启动 Admin、Executor、Compose。 2. **系统配置**:配置执行器地址、数据源与连接参数。 3. **任务设计**:创建分区与任务组,拖拽画布设计流程,配置依赖与参数。 4. **执行监控**:手动或定时触发,查看日志与状态。 **演示视频**:[在线观看](https://www.bilibili.com/video/BV1TBCkBzEex/?spm_id_from=333.1387.upload.video_card.click) --- ## 五、快速开始 ### 环境要求 | 依赖 | 版本要求 | 说明 | |------|----------|------| | JDK | 21+ | 项目 `pom.xml` 指定 Java 21 | | Maven | 3.6+ | 构建与启动 | | MySQL | 5.7+(推荐 8.0+) | 配置持久化 | | Python | 3.6+ | 使用 DataX 时需要 | ### 1. 克隆项目 ```bash git clone https://github.com/xiaozhaoCcz/CC_ETL.git cd CC_ETL ``` ### 2. 数据库初始化 ```sql CREATE DATABASE `cc_etl` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ```bash mysql -u root -p cc_etl < doc/cc_etl.sql ``` > 也可在 MySQL 客户端中执行 `doc/cc_etl.sql`;`doc/cc_etl_clean.sql` 为干净初始数据,可直接导入。 ### 3. 后端配置与启动 **编译**: ```bash cd cc-job mvn clean package -DskipTests ``` **配置要点**: | 模块 | 配置文件 | 关键项 | |------|----------|--------| | Admin | `cc-job-admin/src/main/resources/application-dev.yml` | 端口 8989、数据库连接、`xxl.job.accessToken` | | Executor | `cc-job-executor/src/main/resources/application.yml` | `admin.addresses`、`executor.port`、`logpath` | | Compose | `cc-job-executor-compose/src/main/resources/application.yml` | `cc-job.job.admin.addresses`、`executor.appname`、`port` | > `accessToken` 需在 Admin 与 Executor/Compose 之间保持一致,否则回调会返回 401。 **启动**(需分别开三个终端): ```bash # 1. Admin 调度中心 cd cc-job/cc-job-admin && mvn spring-boot:run # 2. 单任务执行器 cd cc-job/cc-job-executor && mvn spring-boot:run # 3. 编排执行器 cd cc-job/cc-job-executor-compose && mvn spring-boot:run ``` 验证:访问 `http://localhost:8989/xxl-job-admin`。 ### 4. PC 端启动 JavaFX 11+ 已从 JDK 剥离,**不要**直接运行 `CcJobGuiApplication` 主类(会报 *JavaFX runtime components are missing*)。项目已配置 `javafx-maven-plugin`,拉取代码后任选一种方式启动即可,**无需手动配置 `--module-path`**: **方式一:命令行(推荐)** ```bash cd cc-job/cc-job-gui mvn javafx:run ``` **方式二:启动脚本** ```bash # macOS / Linux ./cc-job/cc-job-gui/run.sh # Windows cc-job\cc-job-gui\run.bat ``` **方式三:IntelliJ IDEA 直接运行** 1. **运行**:打开 `Launcher.java`,点击绿色运行按钮 2. **调试**:必须使用运行配置 **CcJobGuiApplication**(已预置 `--module-path`;直接 Debug `Launcher` 会因 JVM 重启导致 JDWP 连接失败) **方式四:IntelliJ IDEA(Maven 方式)** 运行配置选择 **CcJobGui**(`.run/CcJobGui.run.xml`,执行 `mvn javafx:run`)。 ### 5. DataX(可选) 1. 下载并解压 [DataX](https://github.com/alibaba/DataX) 2. 在 Executor 配置中设置: - `cc-job.executor.jsonpath`:DataX JSON 配置目录 - `cc-job.executor.pypath`:指向 `bin/datax.py` --- ## 六、模块说明 ``` Cc_ETL/ ├── cc-job/ # 后端与桌面端主工程 │ ├── cc-job-admin/ # 调度中心(任务注册、Cron 触发、监控 API) │ ├── cc-job-executor/ # 单任务执行器(Bean/API/SQL/DataX/GLUE) │ ├── cc-job-executor-compose/ # 编排执行器(拓扑排序、依赖执行) │ ├── cc-job-core/ # XXL-Job 调度与执行核心 │ ├── cc-job-xo/ # 数据实体与持久层(Mapper / Model) │ ├── cc-job-gui/ # JavaFX PC 端桌面管理 │ └── cc-job-executor-samples/ # 执行器示例工程 ├── doc/ │ ├── cc_etl.sql # 数据库初始化脚本 │ ├── image/ # README 截图资源 │ └── 测试文档/ # GUI 功能测试文档 └── README.md ``` | 模块 | 说明 | |------|------| | **cc-job-admin** | 任务注册与调度中心,任务组与执行器管理 | | **cc-job-executor** | 任务执行器,支持 Bean/API/SQL/Shell/DataX/GLUE 等 | | **cc-job-executor-compose** | 任务编排执行器,拓扑排序与依赖执行 | | **cc-job-core** | 调度与执行核心 | | **cc-job-xo** | 数据存储与实体映射 | | **cc-job-gui** | PC 端桌面管理(JavaFX) | | **cc-job-executor-samples** | 执行器示例工程 | | ~~cc-job-web~~ | Web 端已移除,功能迁移至 PC 端 | | ~~cc-async-tool~~ | 已移除,编排能力已集成至 admin | --- ## 七、技术栈 | 层次 | 技术 | |------|------| | **后端** | Java 21、Spring Boot 3.5、MyBatis Plus、XXL-Job、DataX、Druid、MySQL | | **PC 端** | JavaFX 17+、Maven | | **通信** | REST API、WebSocket(日志流式推送) | | **工具** | Hutool、Knife4j、Redisson、EasyExcel | --- ## 八、文档与常见问题 | 文档 | 说明 | |------|------| | [GUI 功能测试文档](doc/测试文档/GUI功能测试文档.md) | 489 个测试用例与使用参考 | | [功能扩展规划](doc/Cc-ETL功能扩展规划.md) | 适用场景、扩展方向与二次开发参考 | | [在线文档](http://175.178.249.190/blog/post/298) | 详细使用说明 | **常见问题**: | 问题 | 排查方向 | |------|----------| | Admin 数据库连接失败 | 检查库是否创建、脚本是否执行、连接信息与时区(如 `Asia/Shanghai`) | | Executor 未注册 | 确认 Admin 已启动、`admin.addresses` 与 `accessToken` 一致、端口与防火墙 | | DataX 执行失败 | 检查 DataX 安装、`pypath`/`jsonpath`、数据源与表结构、Python 版本 | | 任务组拓扑错误 | 检查是否存在循环依赖、节点是否关联任务、是否选择「任务集执行器」 | | JavaFX 启动报错 | 使用 `mvn javafx:run` 或 `Launcher.java`,勿直接运行 `CcJobGuiApplication` | 更多问题可提交 [GitHub Issues](https://github.com/xiaozhaoCcz/CC_ETL/issues)。 --- ## 九、发展规划 | 阶段 | 内容 | |------|------| | **已完成** | 可视化编排、11 种运行模式、PC 端多面板与高级配置、DataX 集成、Spring Boot 3 升级、权限管控、条件分支 | | **进行中** | 调度中心迁移至 PC、任务审批流程、DataX 配置界面优化 | | **计划中** | 更多数据源、监控告警增强、插件与 API 生态、文档与社区 | 详细规划见 [功能扩展规划](doc/Cc-ETL功能扩展规划.md)。 --- ## 十、贡献与支持 欢迎提交 Issue 与 Pull Request。请从 fork 拉分支开发,提交信息建议使用 `feat/fix/docs` 等前缀。 **致谢**:感谢 [XXL-Job](https://github.com/xuxueli/xxl-job)、[DataX](https://github.com/alibaba/DataX)、[JavaFX](https://openjfx.io/) 等开源项目。 **许可证**:本项目采用 [MIT License](./LICENSE)。若对您有帮助,欢迎 Star、Fork 或参与贡献。 **联系我们**:[GitHub](https://github.com/xiaozhaoCcz/CC_ETL) · [Gitee](https://gitee.com/xzjsccz/Cc_ETL) · [在线文档](http://175.178.249.190/blog/post/298)