当前位置: 首页 > news >正文

SQL导出Excel支持正则脱敏

SQL to Excel Exporter

    • 源码
    • 功能特性
      • 核心功能
      • 性能优化
      • 安全特性
    • 快速开始
      • 环境要求
      • 安装运行
    • API 使用说明
      • 1. 执行SQL并导出Excel
      • 2. 下载导出文件
      • 3. 获取统计信息
      • 4. 清理过期文件
    • 数据脱敏配置
      • 支持的脱敏类型
      • 脱敏规则配置示例
    • 配置说明
      • 应用配置
      • 数据库配置
    • 测试
      • 运行单元测试
      • 运行集成测试
      • 测试覆盖率
    • 使用示例
      • 1. 基础导出
      • 2. 带脱敏的导出
      • 3. 并行执行多个查询
    • 性能建议
    • 故障排除
      • 常见问题
      • 日志配置
    • 贡献指南

一个基于Spring Boot的高性能SQL查询结果导出Excel工具,支持批量SQL执行、数据脱敏、并行处理等功能。

在这里插入图片描述

源码

https://github.com/ShouZhiDuan/easydo/tree/main/sql-to-excel

功能特性

核心功能

  • 批量SQL执行: 支持一次性执行多个SQL查询语句
  • Excel导出: 将查询结果导出到Excel文件,每个SQL结果对应一个Sheet
  • 自定义Sheet名称: 用户可以为每个Sheet指定名称
  • 数据脱敏: 支持手机号、身份证、邮箱等常见字段的脱敏处理
  • 并行执行: 支持并行执行SQL查询,提高处理效率
  • 安全验证: SQL安全性检查,防止危险操作

性能优化

  • 🚀 流式处理: 使用SXSSFWorkbook支持大数据量导出
  • 🚀 连接池: 配置数据库连接池,提高数据库访问效率
  • 🚀 缓存机制: 脱敏规则正则表达式缓存,提高处理速度
  • 🚀 内存控制: 可配置内存中保持的行数,避免内存溢出

安全特性

  • 🔒 SQL注入防护: 基础SQL安全性验证
  • 🔒 数据脱敏: 多种脱敏规则,保护敏感数据
  • 🔒 文件访问控制: 限制文件下载路径,防止路径遍历攻击

快速开始

环境要求

  • Java 17+
  • Maven 3.6+
  • 数据库(MySQL/PostgreSQL/H2等)

安装运行

  1. 克隆项目
git clone <repository-url>
cd sql-csv
  1. 配置数据库
    编辑 src/main/resources/application.yml 文件,配置数据库连接:
spring:datasource:url: jdbc:mysql://localhost:3306/your_databasedriver-class-name: com.mysql.cj.jdbc.Driverusername: your_usernamepassword: your_password
  1. 编译运行
# 编译项目
mvn clean compile# 运行测试
mvn test# 启动应用
mvn spring-boot:run
  1. 访问应用
  • 应用地址: http://localhost:8080
  • H2控制台: http://localhost:8080/h2-console (仅测试环境)
  • 健康检查: http://localhost:8080/api/sql-export/health

API 使用说明

1. 执行SQL并导出Excel

接口: POST /api/sql-export/export

请求示例:

{"sqlList": ["SELECT id, username, email, phone FROM users LIMIT 100","SELECT id, product_name, price FROM products WHERE price > 1000"],"sheetNames": ["用户数据", "产品数据"],"fileName": "export_report.xlsx","parallelExecution": false,"validateSqlSafety": true,"maskingRules": [{"fieldName": "phone","maskingType": "PHONE","enabled": true},{"fieldName": "email","maskingType": "EMAIL","enabled": true}]
}

响应示例:

{"code": 200,"message": "导出成功","success": true,"filePath": "/path/to/export_report.xlsx","fileSize": 15360,"sqlCount": 2,"totalRecords": 150,"recordCounts": [100, 50],"processingTimeMs": 1250,"createdAt": "2024-01-15T10:30:00"
}

2. 下载导出文件

接口: GET /api/sql-export/download?filePath=/path/to/file.xlsx

3. 获取统计信息

接口: GET /api/sql-export/statistics

4. 清理过期文件

接口: DELETE /api/sql-export/cleanup?daysToKeep=7

数据脱敏配置

支持的脱敏类型

类型说明示例
PHONE手机号脱敏138****5678
ID_CARD身份证脱敏110101********1234
EMAIL邮箱脱敏abc***@example.com
BANK_CARD银行卡脱敏6222****7890
NAME姓名脱敏张*三
CUSTOM自定义规则用户自定义正则

脱敏规则配置示例

{"maskingRules": [{"fieldName": "phone","maskingType": "PHONE","enabled": true},{"fieldName": "custom_field","maskingType": "CUSTOM","customRegex": "(\\d{4})\\d*(\\d{4})","customReplacement": "$1****$2","enabled": true}]
}

配置说明

应用配置

app:export:output-directory: ./exports          # 导出文件目录max-sql-count: 50                   # 最大SQL数量max-records-per-query: 100000       # 单个查询最大记录数enable-parallel-execution: true      # 是否启用并行执行default-file-retention-days: 7       # 默认文件保留天数security:enable-sql-validation: true          # 是否启用SQL安全验证allowed-download-paths:              # 允许下载的路径- ./exportsperformance:excel-rows-in-memory: 1000          # Excel内存中保持的行数sql-timeout-seconds: 300            # SQL执行超时时间thread-pool-size: 4                 # 线程池大小

数据库配置

支持多种数据库:

MySQL:

spring:datasource:url: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: usernamepassword: password

PostgreSQL:

spring:datasource:url: jdbc:postgresql://localhost:5432/databasedriver-class-name: org.postgresql.Driverusername: usernamepassword: password

测试

运行单元测试

mvn test

运行集成测试

mvn verify

测试覆盖率

mvn jacoco:report

使用示例

1. 基础导出

curl -X POST http://localhost:8080/api/sql-export/export \-H "Content-Type: application/json" \-d '{"sqlList": ["SELECT * FROM users LIMIT 10"],"sheetNames": ["用户列表"]}'

2. 带脱敏的导出

curl -X POST http://localhost:8080/api/sql-export/export \-H "Content-Type: application/json" \-d '{"sqlList": ["SELECT username, phone, email FROM users"],"sheetNames": ["用户信息"],"maskingRules": [{"fieldName": "phone", "maskingType": "PHONE", "enabled": true},{"fieldName": "email", "maskingType": "EMAIL", "enabled": true}]}'

3. 并行执行多个查询

curl -X POST http://localhost:8080/api/sql-export/export \-H "Content-Type: application/json" \-d '{"sqlList": ["SELECT * FROM users","SELECT * FROM orders","SELECT * FROM products"],"sheetNames": ["用户", "订单", "产品"],"parallelExecution": true}'

性能建议

  1. 大数据量处理:

    • 使用LIMIT限制查询结果数量
    • 启用并行执行提高效率
    • 适当调整excel-rows-in-memory参数
  2. 内存优化:

    • 避免一次性查询过多数据
    • 及时清理过期文件
    • 监控JVM内存使用情况
  3. 数据库优化:

    • 确保查询SQL有适当的索引
    • 配置合适的连接池大小
    • 避免长时间运行的查询

故障排除

常见问题

  1. 内存溢出

    • 减少max-records-per-query配置
    • 增加JVM堆内存: -Xmx2g
    • 减少excel-rows-in-memory配置
  2. SQL执行超时

    • 增加sql-timeout-seconds配置
    • 优化SQL查询性能
    • 检查数据库连接状态
  3. 文件生成失败

    • 检查输出目录权限
    • 确保磁盘空间充足
    • 查看应用日志错误信息

日志配置

logging:level:com.example.sqlcsv: DEBUGfile:name: ./logs/sql-csv-exporter.log

贡献指南

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

相关文章:

  • AD规则设置-铜皮规则,阻焊规则,实时DRC
  • AI时代:学习永不嫌晚,语言多元共存
  • LambdaqueryWrapper的介绍与使用
  • 第十二讲 | 二叉搜索树
  • JavaScript 语法结构
  • Android 大文件分块上传实战:突破表单数据限制的完整方案
  • 用 AI 开发 AI:原汤化原食的 MCP 桌面客户端
  • 【评测】Qwen3-Embedding模型初体验
  • MSYS2 环境配置与 Python 项目依赖管理笔记
  • android计算器代码
  • typeof运算符 +unll和undefined的区别
  • 树状数组学习笔记
  • 人工智能学习07-函数
  • MATLAB遍历生成20到1000个节点的无线通信网络拓扑推理数据
  • 动态模块加载的响应式架构:从零到一的企业级实战指南
  • 量化面试绿皮书:7. 100的阶乘中有多少个尾随零
  • 《PyTorch深度学习入门》
  • 05.查询表
  • 探索双曲函数:从定义到MATLAB可视化
  • 【CATIA的二次开发23】抽象对象Document涉及文档激活控制的方法
  • 买完阿里云域名如何做网站/工具大全
  • 建设政府信息资源共享网站/百色seo外包
  • 合肥大型网站建设公司/西安百度快照优化
  • 手机微信网站开发/南京网站seo
  • 做网站怎么能在百度搜索到/seo成创网络
  • 网站建设方式/nba最新比赛直播