Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Open more actions menu

Repository files navigation

EasyArchive

📦 企业级数据归档与迁移平台
优雅、小巧、平滑 — 一站式 MySQL 数据归档解决方案

Java 11 Spring Boot 2.7.18 MySQL 5.7+ Vue 3.5 Apache 2.0

📖 目录

📚 使用指南

面向用户开发者、运维人员的详细使用指南,深入解析各功能特性。

文档 说明
✨ 功能特性详解 数据源管理、归档分组、归档规则、任务监控、表达式引擎、通知系统、权限模型等完整功能说明
🚀 快速部署指南 Docker Compose 一键部署、本地开发部署、生产环境部署、安全加固与性能调优
💡 表达式引擎指南 表达式语法、13 种内置命令详解、嵌套用法、实战示例
📡 API 参考文档 完整的 RESTful API 接口说明、参数文档、请求/响应示例、客户端 SDK 用法
📘 操作指南 面向运维控制台的新手引导,从登录到完成第一个归档任务的完整操作流程

📖 项目简介

EasyArchive 是一个面向 MySQL 的企业级数据归档与迁移平台,提供完整的 Web 控制台、细粒度权限管理和实时任务监控。它支持按时间和按 ID 两种归档策略,通过可视化界面即可配置、执行和监控归档任务,让历史数据归档变得简单、高效、安全。

✨ 核心特性

特性 说明
双策略归档 支持按时间范围归档和按 ID 范围归档,满足多种业务场景
Web 管理控制台 基于 Vue 3 + TypeScript 的现代化运维界面,涵盖数据源、分组、规则、任务、用户全生命周期管理
细粒度权限控制 基于 RBAC 模型,支持系统管理员 / 归档管理员 / 普通用户三级角色,数据源级读写权限隔离
实时任务监控 任务进度实时追踪、处理速率可视化、心跳机制、分阶段日志记录
多通道消息通知 归档任务完成 / 失败时,通过飞书 / 企业微信群机器人或站内消息通知指定成员
操作审计日志 全量记录所有 CRUD 操作,支持按模块 / 操作类型 / 时间范围检索
幂等与可靠性 终态幂等标记、任务中断恢复、执行阶段原子性保障
表达式引擎 内建 SpEL + 自定义命令树表达式引擎,支持字段映射、时间计算、哈希取模等数据转换
Docker 一键启动 Compose 编排 MySQL + 后端 + 前端,三步完成环境搭建

🏗️ 项目结构

easy-archive/
├── easyarchive-common/          # 核心 API 与工具模块
│   └── api/                     #   PageSource, Sink, Writer 等核心接口
│   ├── concurrent/              #   并发锁 (ILock)
│   ├── entity/                  #   BaseEntity, Pair
│   ├── enums/                   #   归档类型 / 任务状态 / 数据源状态等枚举
│   ├── exception/               #   统一异常模型
│   ├── statistic/               #   归档统计信息
│   └── util/                    #   JSON、日期、集合等工具类
├── easyarchive-core/            # 核心业务逻辑模块
│   ├── ArchiveGroupExecutor/    #   归档组并发执行引擎
│   ├── SyncExecutor/            #   单表同步执行器
│   ├── connection/              #   数据源连接管理
│   ├── event/                   #   归档事件 (RuleStart/End, TaskStart/Progress/End)
│   ├── executor/                #   归档执行器抽象
│   ├── expr/                    #   表达式引擎 (SpEL + 自定义命令)
│   ├── listener/                #   归档事件监听器
│   ├── property/                #   配置属性绑定
│   ├── repository/              #   归档日志仓储接口
│   ├── rule/                    #   规则实体与加载器
│   ├── sink/                    #   Sink 实现 (MySQL)
│   └── source/                  #   PageSource 实现 (MySQL)
├── easyarchive-starter/         # Spring Boot 启动模块
│   ├── config/                  #   自动配置 / 安全配置
│   ├── controller/              #   RESTful API 控制器
│   ├── security/                #   JWT 认证 / RBAC 权限
│   ├── service/                 #   业务逻辑层
│   ├── notification/            #   通知体系 (飞书/企微/站内信)
│   ├── operationlog/            #   操作审计日志
│   ├── task/                    #   定时清理任务 (日志/通知)
│   └── resources/
│       ├── db/migration/        #   Flyway 数据库迁移脚本 (V1~V12)
│       └── mapper/              #   MyBatis XML 映射文件
├── easyarchive-ui/              # Vue 3 + TypeScript 前端控制台
│   ├── src/
│   │   ├── api/                 #   后端 API 封装
│   │   ├── views/               #   页面组件
│   │   ├── components/          #   通用组件
│   │   ├── stores/              #   Pinia 状态管理
│   │   ├── router/              #   路由配置
│   │   └── types/               #   TypeScript 类型定义
│   └── Dockerfile               #   容器化构建
├── compose.yaml                 # Docker Compose 一键编排
└── pom.xml                      # 父 POM (Maven)

🚀 快速开始

方式一:Docker Compose(推荐)

前置条件: 安装 DockerDocker Compose

# 1. 克隆项目
git clone https://github.com/your-repo/easy-archive.git
cd easy-archive

# 2. 一键启动 (MySQL + 后端 + 前端)
docker compose up -d

# 等待服务就绪后,访问:
# 前端控制台: http://localhost
# 后端 API:    http://localhost:8789

首次启动会自动创建数据库 easy_archive 并执行全部 Flyway 迁移脚本 (V1~V12)。

默认登录账号: admin / admin(首次登录后建议修改密码)

方式二:本地开发

环境要求

  • Java 11+
  • Maven 3.6+
  • MySQL 5.7+ 或 8.0+
  • Node.js 18+ (前端开发)

后端

# 1. 创建数据库并执行初始化脚本
mysql -u root -p < easyarchive-starter/src/main/resources/db/migration/V1__init_archive_platform.sql

# 2. 确认环境变量 / application.yml 中的数据库连接
#    MYSQL_HOST=localhost
#    MYSQL_PORT=3306
#    MYSQL_DATABASE=easy_archive
#    MYSQL_USER=root
#    MYSQL_PASSWORD=your_password

# 3. 编译并启动
mvn clean install -DskipTests
cd easyarchive-starter
mvn spring-boot:run

后端启动成功后访问 http://localhost:8789/actuator/health 确认服务状态。

前端

cd easyarchive-ui

# 安装依赖
npm install

# 开发模式 (默认 http://localhost:5173)
npm run dev

# 生产构建
npm run build

环境变量

变量名 默认值 说明
MYSQL_HOST localhost MySQL 主机地址
MYSQL_PORT 3306 MySQL 端口
MYSQL_DATABASE easy_archive 数据库名
MYSQL_USER easyarchive 数据库用户
MYSQL_PASSWORD easyarchive123 数据库密码
MYSQL_ROOT_PASSWORD root123456 root 密码 (仅 Docker)
MYSQL_TIMEZONE Asia/Shanghai 时区
BACKEND_PORT 8789 后端端口
FRONTEND_PORT 80 前端端口

📡 API 概览

所有 API 以 /api/v1 为前缀,采用 JSON 响应格式。

认证

方法 路径 说明 鉴权
POST /api/v1/auth/login 用户登录,返回 JWT Token
POST /api/v1/auth/logout 用户登出
POST /api/v1/auth/me 获取当前用户信息
POST /api/v1/auth/change-password 修改密码

数据源

方法 路径 说明 鉴权
GET/POST /api/v1/datasources 查询 / 创建数据源
PUT /api/v1/datasources/{id} 更新数据源
DELETE /api/v1/datasources/{id} 删除数据源
POST /api/v1/datasources/test 测试数据源连接

归档分组

方法 路径 说明 鉴权
GET/POST /api/v1/archive-groups 查询 / 创建归档分组
PUT/DELETE /api/v1/archive-groups/{id} 更新 / 删除分组

归档规则

方法 路径 说明 鉴权
GET/POST /api/v1/archive-group-items/by-id 按 ID 规则管理
GET/POST /api/v1/archive-group-items/by-time 按时间规则管理

任务管理

方法 路径 说明 鉴权
GET/POST /api/v1/archive-tasks 查询 / 触发归档任务
GET /api/v1/archive-tasks/{id} 获取任务详情
GET /api/v1/archive-tasks/{id}/logs 获取任务日志
POST /api/v1/archive-tasks/{id}/cancel 取消任务

监控大盘

方法 路径 说明 鉴权
GET /api/v1/dashboard/overview 获取全局统计概览

用户与权限

方法 路径 说明 鉴权
GET/POST /api/v1/users 用户管理 ✅ (platform_admin)
GET/POST /api/v1/datasource-permissions 用户数据源权限管理 ✅ (platform_admin)

通知中心

方法 路径 说明 鉴权
GET /api/v1/notifications 获取站内消息列表
GET /api/v1/notifications/unread-count 未读消息数

操作日志

方法 路径 说明 鉴权
GET /api/v1/operation-logs 分页查询操作审计日志

响应格式

{
  "code": "SUCCESS",
  "message": "操作成功",
  "requestId": "xxx-xxx-xxx",
  "data": { ... }
}

🛡️ 权限模型

系统采用 RBAC(基于角色的访问控制) 模型,内置三种角色:

角色编码 角色名称 数据范围 说明
platform_admin 系统管理员 ALL 拥有全部权限,可管理用户和数据源权限
archive_admin 归档管理员 ASSIGNED 可管理数据源权限、创建普通用户、操作被授权的归档分组
normal_user 普通用户 OWN 仅可操作被分配的归档分组,不可管理用户

数据源权限分为两级:

权限级别 说明
MANAGE 可编辑数据源配置,并在该数据源上创建归档分组
USE 仅可在该数据源上执行归档任务,不可修改配置

📊 数据流

用户通过 Web 控制台配置数据源和归档规则
        │
        ▼
归档分组 (ArchiveGroup) 包含一组归档规则
        │
        ▼
触发归档任务 (ArchiveTask)
        │
        ├── 规则开始事件 (RuleStartEvent)
        │
        ├── 按 ID / 按时间 分片
        │       │
        │       ▼
        │   SyncExecutor 并行读取 & 写入
        │       │
        │       ├── MysqlSource 分页读取源表
        │       ├── 数据写入目标表 (MysqlSink)
        │       └── 源数据清理 (Cleaner)
        │
        ▼
任务完成 → 进度事件 (TaskProgressEvent) → 任务结束 (RuleEndEvent)
        │
        ▼
触发通知 (飞书 / 企微 / 站内消息) 通知相关人员

⚙️ 配置参考

后端配置 (application.yml)

server:
  port: 8789

spring:
  datasource:
    url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:easy_archive}
    username: ${MYSQL_USER:root}
    password: ${MYSQL_PASSWORD:123456}
    hikari:
      minimum-idle: 5
      maximum-pool-size: 20
      max-lifetime: 1800000

archive:
  task:
    thread-pool:
      core-pool-size: 10
      max-pool-size: 50
      queue-capacity: 100
  rule:
    default-batch-size: 1000      # 默认批量处理条数
    default-pause-ms: 100         # 每批处理后的暂停时间(ms)
  datasource:
    test-query: SELECT 1          # 连接测试 SQL
  log:
    enabled: true                 # 是否启用归档日志
    retention-days: 30            # 日志保留天数

sync:
  reader:
    load:
      max:
        rows: 5000               # 单次最大加载行数
      unit-time:
        max:
          try:
            frequency: 10000     # 单位时间内最大尝试次数
  archive:
    step:
      interval:
        time: 50                 # 归档步骤间隔(ms)

🧪 测试

# 全量测试
mvn test

# 仅测试后端模块
mvn test -pl easyarchive-starter

# 跳过测试编译
mvn install -Dmaven.test.skip=true

# 前端测试
cd easyarchive-ui
npm test

# 完整预检 (编译 + 契约测试 + 构建验证)
./scripts/preflight-check.sh

🐳 容器化部署

Docker Compose

# compose.yaml 包含三个服务:
#   mysql    - MySQL 8.0 数据库
#   backend  - Java 11 + Spring Boot 后端
#   frontend - Nginx + Vue 3 静态资源
# 构建并启动
docker compose up -d --build

# 查看日志
docker compose logs -f backend

# 停止
docker compose down

独立构建

# 后端
docker build -t easyarchive-backend:local -f easyarchive-starter/Dockerfile ..

# 前端
docker build -t easyarchive-frontend:local -f easyarchive-ui/Dockerfile ./easyarchive-ui

🗄️ 数据库迁移

系统使用 Flyway 进行数据库版本管理。当前已将所有变更整合为单一初始化脚本 V1__init_archive_platform.sql,全新部署直接执行该脚本即可构建完整数据库结构。

脚本位置: easyarchive-starter/src/main/resources/db/migration/V1__init_archive_platform.sql

独立部署脚本: docs/database/schema.sql(可直接在 MySQL 客户端执行)

表清单:

模块 表名 说明
权限与审计 sys_user 用户表
sys_role 角色表
sys_permission 权限表
sys_user_role 用户角色关联表
sys_role_permission 角色权限关联表
sys_login_session 登录会话表
sys_operation_log 操作日志表
归档核心 ea_archive_datasource 数据源表
ea_archive_group 归档分组表
ea_archive_task 归档任务表
ea_archive_task_detail 归档任务明细表
ea_archive_task_progress 归档任务进度表
ea_archive_task_log 归档任务日志表
ea_archive_group_execute_task 归档执行任务表
ea_archive_group_item_by_id 按 ID 归档分组明细
ea_archive_group_item_by_time 按时间归档分组明细
数据源授权 ea_archive_connection_permission 数据源权限表
监控告警 ea_monitor_rule 监控规则表
ea_alert_event 告警事件表
站内通知 ea_archive_group_notification_user 归档分组站内通知成员
ea_in_app_notification 平台站内通知主表
ea_in_app_notification_recipient 平台站内通知收件箱

📦 扩展开发

实现新的数据源

public class CustomSource implements PageSource {
    @Override
    public DataIterator read(Object start, Object end, Integer exePage,
                             int maxLoadRows, int interval) {
        // 分页读取数据
    }

    @Override
    public void clean(List<DataRecord> dataList) {
        // 源数据清理
    }
}

实现新的数据接收器

public class CustomSink implements Sink {
    @Override
    public void write(List<DataRecord> dataList) {
        // 批量写入数据
    }
}

添加自定义表达式执行器

实现 CommandExecutor 接口并注册到 ExecutorRegistry

@Component
public class MyCustomExecutor implements CommandExecutor {
    @Override
    public Result execute(CommandNode node, Environment env) {
        // 自定义执行逻辑
    }
}

🤝 贡献指南

  1. Fork 本仓库并创建特性分支 (git checkout -b feature/your-feature)
  2. 遵循现有代码风格和约定
  3. 添加必要的单元测试
  4. 更新相关文档
  5. 提交 Pull Request

📄 许可证

本项目采用 Apache License 2.0

About

EasyArchive 是一个面向 MySQL 的企业级数据归档与迁移平台。支持按时间和按 ID 两种归档策略,提供 Vue 3 Web 管理控制台、基于 RBAC 的细粒度权限控制、实时任务监控和多通道消息通知。一站式配置、执行和监控历史数据归档任务

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.