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等)
安装运行
- 克隆项目
git clone <repository-url>
cd sql-csv
- 配置数据库
编辑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
- 编译运行
# 编译项目
mvn clean compile# 运行测试
mvn test# 启动应用
mvn spring-boot:run
- 访问应用
- 应用地址: 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 |
邮箱脱敏 | 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}'
性能建议
-
大数据量处理:
- 使用LIMIT限制查询结果数量
- 启用并行执行提高效率
- 适当调整
excel-rows-in-memory
参数
-
内存优化:
- 避免一次性查询过多数据
- 及时清理过期文件
- 监控JVM内存使用情况
-
数据库优化:
- 确保查询SQL有适当的索引
- 配置合适的连接池大小
- 避免长时间运行的查询
故障排除
常见问题
-
内存溢出
- 减少
max-records-per-query
配置 - 增加JVM堆内存:
-Xmx2g
- 减少
excel-rows-in-memory
配置
- 减少
-
SQL执行超时
- 增加
sql-timeout-seconds
配置 - 优化SQL查询性能
- 检查数据库连接状态
- 增加
-
文件生成失败
- 检查输出目录权限
- 确保磁盘空间充足
- 查看应用日志错误信息
日志配置
logging:level:com.example.sqlcsv: DEBUGfile:name: ./logs/sql-csv-exporter.log
贡献指南
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature
) - 提交更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 打开 Pull Request
相关文章:

SQL导出Excel支持正则脱敏
SQL to Excel Exporter 源码功能特性核心功能性能优化安全特性 快速开始环境要求安装运行 API 使用说明1. 执行SQL并导出Excel2. 下载导出文件3. 获取统计信息4. 清理过期文件 数据脱敏配置支持的脱敏类型脱敏规则配置示例 配置说明应用配置数据库配置 测试运行单元测试运行集成…...
05.查询表
查询表 字段显示可以使用别名: col1 AS alias1, col2 AS alias2, … WHERE子句:指明过滤条件以实现“选择"的功能: 过滤条件: 布尔型表达式算术操作符:,-,*,/,%比较操作符:,<>(相等或都为空),<>,!(非标准SQL),>,>,<,<范围查询: BETWEEN min_num …...
基于深度强化学习的智能机器人导航系统
前言 随着人工智能技术的飞速发展,机器人在日常生活和工业生产中的应用越来越广泛。其中,机器人导航技术是实现机器人自主移动的关键。传统的导航方法依赖于预设的地图和路径规划算法,但在复杂的动态环境中,这些方法往往难以适应。…...

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

代码随想录算法训练营第60期第六十天打卡
大家好,今天因为有数学建模比赛的校赛,今天的文章可能会简单一点,望大家原谅,我们昨天主要讲的是并查集的题目,我们复习了并查集的功能,我们昨天的题目其实难度不小,尤其是后面的有向图…...

数据结构——D/串
一、串的定义和基本操作  1. 串的定义   1)串的概念   组成结构: 串是由零个或多个字符组成的有限序列,记为 S′a1a2⋯an′Sa_1a_2\cdots a_nS′a1a2⋯an′&#x…...
瀚文机械键盘固件开发详解:HWKeyboard.cpp文件解析与应用
🔥 机械键盘固件开发从入门到精通:HWKeyboard模块全解析 作为一名嵌入式开发老司机,今天带大家拆解一个完整的机械键盘固件代码。即使你是单片机小白,看完这篇教程也能轻松理解机械键盘的工作原理,甚至自己动手复刻一…...
Nginx+Tomcat负载均衡与动静分离架构
目录 简介 一、Tomcat基础部署与配置 1.1 Tomcat应用场景与特性 1.2 环境准备与安装 1.3 Tomcat主配置文件详解 1.4 部署Java Web站点 二、NginxTomcat负载均衡群集搭建 2.1 架构设计与原理 2.2 环境准备 2.3 Tomcat2配置(与Tomcat1对称) 2.4…...

AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月8日第102弹
从今天开始,咱们还是暂时基于旧的模型进行预测,好了,废话不多说,按照老办法,重点8-9码定位,配合三胆下1或下2,杀1-2个和尾,再杀4-5个和值,可以做到100-300注左右。 (1)定…...
LeetCode--25.k个一组翻转链表
解题思路: 1.获取信息: (1)给定一个链表,每k个结点一组进行翻转 (2)余下不足k个结点,则不进行交换 2.分析题目: 其实就是24题的变题,24题是两两一组进行交换&…...
css | class中 ‘.‘ 和 ‘:‘ 的使用 | 如,何时用 .is-selected{ ... } 何时用 :hover{...}?
省流总结:交互时的短暂视觉反馈 → 用 :hover,状态需要记录或切换 → 用类名如 .is-selected。 🧠 本质区别: 写法触发方式用途&.is-selected依赖 class 切换需要 JavaScript 控制状态,如选中、激活&:hover鼠…...

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

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

Framework开发之IMS逻辑浅析1--关键线程及作用
关键线程:EventHub,InputReader,InputDispatcher EventHub: 由于Android继承Linux,Linux的思想是一切皆文件,而输入的类型不止一种(触碰,写字笔,键盘等),每种类型都对应一种驱动设备,而每个硬件驱动设备又对应Linux的一个目录文件…...
The Quantization Model of Neural Scaling
文章目录 摘要1引言2 理论3 概念验证:一个玩具数据集3.1 “多任务稀疏奇偶校验”数据集3.2 幂律规模和新兴能力 4 拆解大型语言模型的规模定律4.1 单token损失的分布4.2 单基因(monogenic)与多基因(polygenic)的规模曲…...
数据源指的是哪里的数据,磁盘中还是内存中
在 MyDB 项目中,特别是这段缓存框架代码: T obj getForCache(key);以及它的上下文: AbstractCache 是一个抽象类,内部有两个抽象方法,留给实现类去实现具体的操作: protected abstract T getForCache(lon…...

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

DeepSeek R1 V2 深度探索:开源AI编码新利器,效能与创意并进
最近,AI界迎来了一位神秘的“突袭者”——DeepSeek团队悄无声息地发布了其推理模型DeepSeek R1的重磅升级版V2(具体型号R1-0528)。这款基于MIT许可的开源模型,在原版R1的基础上进行了多项令人瞩目的改进,正以其强大的潜…...

surfer15安装
安装文件 安装包和破解文件 安装 破解及汉化 打开软件...
MySQL从入门到DBA深度学习指南
目录 引言 MySQL基础入门 数据库基础概念 MySQL安装与配置 SQL语言进阶 数据库设计与规范化 数据库设计原则 表结构设计 MySQL核心管理 用户权限管理 备份与恢复 性能优化基础 高级管理与高可用 高可用与集群 故障诊断与监控 安全与审计 DBA实战与运维 性能调…...

Python训练营---DAY48
DAY 48 随机函数与广播机制 知识点回顾: 随机张量的生成:torch.randn函数卷积和池化的计算公式(可以不掌握,会自动计算的)pytorch的广播机制:加法和乘法的广播机制 ps:numpy运算也有类似的广播机…...

debian12拒绝海外ip连接
确保 nftables 已安装: Debian 12 默认使用 nftables 作为防火墙框架。检查是否安装: 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或更高版本。 运行下载的安装程序,按照提示完成安装。注意记录JDK的安装路径(如C:\Program Files\Java\jdk-11.0.15)。 配置环境变量: 右键…...

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

低功耗高安全:蓝牙模块在安防系统中的应用方案
随着物联网(IoT)和智能家居的快速发展,安防行业正迎来前所未有的技术革新。蓝牙模块作为一种低功耗、高稳定性的无线通信技术,凭借其低成本、易部署和智能化管理等优势,在安防领域发挥着越来越重要的作用。本文将探讨蓝牙模块在安防系统中的应…...
数据库(sqlite)基本操作
数据库(sqlite) 一:简介: 为什么需要单独的数据库来进行管理数据? 数据的各种查询功能数据的备份和恢复花大量时间在文件数据的结构设计和维护上要考虑多线程对数据的操作会涉及到同步问题,会增加很多额…...
【HarmonyOS 5】游戏开发教程
一、开发环境搭建 工具配置 安装DevEco Studio 5.1,启用CodeGenie AI助手(Settings → Tools → AI Assistant)配置游戏模板:选择"Game"类型项目,勾选手机/平板/折叠屏多设备支持 二、游戏引擎核心架构…...
神经元激活函数在神经网络里起着关键作用
神经元激活函数在神经网络里起着关键作用,它能为网络赋予非线性能力,让网络可以学习复杂的函数映射关系。下面从多个方面详细剖析激活函数的作用和意义: 1. 核心作用:引入非线性因素 线性模型的局限性: 假设一个简单…...
[蓝桥杯 2024 国 B] 蚂蚁开会
问题描述 二维平面上有 n 只蚂蚁,每只蚂蚁有一条线段作为活动范围,第 i 只蚂蚁的活动范围的两个端点为 (uix,uiy),(vix,viy)。现在蚂蚁们考虑在这些线段的交点处设置会议中心。为了尽可能节省经费,它们决定只在所有交点为整点的地方设置会议…...
GIT(AI回答)
在Git中,git push 命令主要用于将本地分支的提交推送到远程仓库(如GitHub、GitLab等)。如果你希望将本地分支的改动同步到另一个本地分支,这不是 git push 的设计目的。以下是正确的替代方法: 方法1࿱…...