SQL导出Excel支持正则脱敏

news2025/6/9 16:30:46

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_database
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: your_username
    password: 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:              # 允许下载的路径
      - ./exports
  
  performance:
    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/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: username
    password: password

PostgreSQL:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/database
    driver-class-name: org.postgresql.Driver
    username: username
    password: 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: DEBUG
  file:
    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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2405582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第三十九周】ViLT

ViLT 摘要Abstract文章信息介绍提取视觉特征的方式的演变模态融合的两种方式四种不同的 VLP 模型Q&A 方法模型结构目标函数Whole Word Masking&#xff08;WWM&#xff09; 实验结果总结 摘要 本篇博客介绍了ViLT&#xff08;Vision-and-Language Transformer&#xff09;…

代码随想录算法训练营第60期第六十天打卡

大家好&#xff0c;今天因为有数学建模比赛的校赛&#xff0c;今天的文章可能会简单一点&#xff0c;望大家原谅&#xff0c;我们昨天主要讲的是并查集的题目&#xff0c;我们复习了并查集的功能&#xff0c;我们昨天的题目其实难度不小&#xff0c;尤其是后面的有向图&#xf…

数据结构——D/串

一、串的定义和基本操作 &#xfeff; 1. 串的定义 &#xfeff; &#xfeff; 1&#xff09;串的概念 &#xfeff; &#xfeff; 组成结构: 串是由零个或多个字符组成的有限序列&#xff0c;记为 &#xfeff;S′a1a2⋯an′Sa_1a_2\cdots a_nS′a1​a2​⋯an′​&#x…

AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月8日第102弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀4-5个和值&#xff0c;可以做到100-300注左右。 (1)定…

【第九篇】 SpringBoot测试补充篇

简介 本文介绍了SpringBoot测试中的五项关键技术&#xff1a;测试类专用属性加载、 测试类专用Bean配置、 表现层测试方法、测试类事务回滚控制、配置文件随机数据设置&#xff09;。这些技术可以有效隔离测试环境&#xff0c;确保测试数据不影响生产环境&#xff0c;同时提供了…

springcloud SpringAmqp消息队列 简单使用

这期只是针对springBoot/Cloud 在使用SpringAmqp消息队列的时候遇到的坑。 前提 如果没有安装RabbitMQ是无法连接成功的&#xff01;所以前提是你要安装好RabbitMQ。 docker 安装命令 # 拉取docker镜像 docker pull rabbitmq:management# 创建容器 docker run -id --namera…

Framework开发之IMS逻辑浅析1--关键线程及作用

关键线程:EventHub,InputReader,InputDispatcher EventHub: 由于Android继承Linux,Linux的思想是一切皆文件,而输入的类型不止一种(触碰&#xff0c;写字笔&#xff0c;键盘等)&#xff0c;每种类型都对应一种驱动设备&#xff0c;而每个硬件驱动设备又对应Linux的一个目录文件…

系统思考:跳出症状看全局

明天将为华为全球采购认证管理部的伙伴们带来一场关于系统思考的深度课程&#xff01;通过经典的啤酒游戏经营决策沙盘&#xff0c;一起沉浸式体验如何从全局视角看待问题&#xff0c;发现单点最优并不等于全局最优。 这不仅是一次简单的课程&#xff0c;更是一次洞察系统背后…

DeepSeek R1 V2 深度探索:开源AI编码新利器,效能与创意并进

最近&#xff0c;AI界迎来了一位神秘的“突袭者”——DeepSeek团队悄无声息地发布了其推理模型DeepSeek R1的重磅升级版V2&#xff08;具体型号R1-0528&#xff09;。这款基于MIT许可的开源模型&#xff0c;在原版R1的基础上进行了多项令人瞩目的改进&#xff0c;正以其强大的潜…

surfer15安装

安装文件 安装包和破解文件 安装 破解及汉化 打开软件

Python训练营---DAY48

DAY 48 随机函数与广播机制 知识点回顾&#xff1a; 随机张量的生成&#xff1a;torch.randn函数卷积和池化的计算公式&#xff08;可以不掌握&#xff0c;会自动计算的&#xff09;pytorch的广播机制&#xff1a;加法和乘法的广播机制 ps&#xff1a;numpy运算也有类似的广播机…

debian12拒绝海外ip连接

确保 nftables 已安装&#xff1a; Debian 12 默认使用 nftables 作为防火墙框架。检查是否安装&#xff1a; sudo apt update sudo apt install nftables启用并启动 nftables 服务 sudo systemctl enable nftables sudo systemctl start nftables下载maxmind数据库 将文件解…

70年使用权的IntelliJ IDEA Ultimate安装教程

安装Java环境 下载Java Development Kit (JDK) 从Oracle官网或OpenJDK。推荐选择JDK 11或更高版本。 运行下载的安装程序&#xff0c;按照提示完成安装。注意记录JDK的安装路径&#xff08;如C:\Program Files\Java\jdk-11.0.15&#xff09;。 配置环境变量&#xff1a; 右键…

MySQL的日志

就相当于人的日记本&#xff0c;记录每天发生的事&#xff0c;可以对数据进行追踪 一、错误日志 也就是存放错误信息的 二、二进制日志-binlog 在低版本的MySQL中&#xff0c;二进制日志是不会默认开启的 存放除了查询语句的其他语句 三、查询日志 查询日志会记录客户端的所…

低功耗高安全:蓝牙模块在安防系统中的应用方案

随着物联网(IoT)和智能家居的快速发展&#xff0c;安防行业正迎来前所未有的技术革新。蓝牙模块作为一种低功耗、高稳定性的无线通信技术&#xff0c;凭借其低成本、易部署和智能化管理等优势&#xff0c;在安防领域发挥着越来越重要的作用。本文将探讨蓝牙模块在安防系统中的应…

C++定长内存块的实现

内存池 内存池是指程序预先从操作系统 申请一块足够大内存 &#xff0c;此后&#xff0c;当程序中需要申请内存的时候&#xff0c;不是直接向操作系统申请&#xff0c;而是 直接从内存池中获取 &#xff1b; 同理&#xff0c;当 **程序释放内存 **的时候&#xff0c;并不真正将…

Unity使用代码分析Roslyn Analyzers

一、创建项目&#xff08;注意这里不要选netstandard2.1会有报错&#xff09; 二、NuGet上安装Microsoft.CodeAnalysis.CSharp 三、实现[Partial]特性标注的类&#xff0c;结构体&#xff0c;record必须要partial关键字修饰 需要继承DiagnosticAnalyzer 注意一定要加特性Diagn…

大数据CSV导入MySQL

CSV Import MySQL 源码主要特性技术栈快速开始1. 环境要求2. 构建项目3. 使用方式交互式模式命令行模式编程方式使用 核心组件1. CsvService2. DatabaseService3. CsvImportService 数据类型映射性能优化1. 连接池优化2. 批量操作优化3. MySQL配置优化 配置说明application.yml…

MySQL 索引优化(Explain执行计划) 详细讲解

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 MySQL 索引优化&#xff08;Explain执行计划…

Cad 反应器 cad c#二次开发

在 AutoCAD C# 二次开发中&#xff0c;DocumentCollectionEventHandler 是一个委托&#xff08;delegate&#xff09;&#xff0c;用于处理与 AutoCAD 文档集合&#xff08;DocumentCollection&#xff09;相关的事件。它属于 AutoCAD .NET API 的事件处理机制&#xff0c;本质…