spring boot easyexcel
1.pom
<!-- easyexcel 依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency>
2.ExcelListener
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.example.springbootexcel.eneity.ExcelEntity;
import com.example.springbootexcel.thread.ExcelThread;
import lombok.extern.slf4j.Slf4j;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.*;@Slf4j
public class ExcelListener extends AnalysisEventListener<ExcelEntity> {/*** 多线程集合*/private List<ExcelEntity> list = Collections.synchronizedList(new ArrayList<>());/*** 创建线程*/private static final int CORE_POOL_SIZE = 5; //核心线程数private static final int MAX_POOL_SIZE = 10; //最大线程数private static final int QUEUE_CAPACITY = 100; //队列大小private static final Long KEEP_ACTIVE_TIME= 1L; //存活时间public ExcelListener(){}public List<ExcelEntity> getList() {return list;}public void setList(List<ExcelEntity> list) {this.list = list;}@Overridepublic void invoke(ExcelEntity excelEntity, AnalysisContext analysisContext) {log.info("接收到excel数据");if(excelEntity!=null){list.add(excelEntity);}}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {log.info("解析结束,开始保存数据");//创建线程池ExecutorService executorService = new ThreadPoolExecutor(CORE_POOL_SIZE,MAX_POOL_SIZE,KEEP_ACTIVE_TIME,TimeUnit.SECONDS,new ArrayBlockingQueue<>(QUEUE_CAPACITY),new ThreadPoolExecutor.CallerRunsPolicy());//指定每个线程处理的导入数量,暂定1000int singleThreadDealCount = 1000;//每个线程需要处理的数量以及总数,计算需要提交到线程池的线程数量int threadSize = (list.size() / singleThreadDealCount) + 1;//计算需要导入的数据总数int rowSize = list.size() + 1;//开始时间long startTime = System.currentTimeMillis();//线程开始处理的位置int startPosition = 0;//线程结束位置int endPosition = 0;CountDownLatch countDownLatch = new CountDownLatch(threadSize);for(int i=0;i<threadSize;i++){if((i+1) == threadSize){startPosition = (i * singleThreadDealCount);endPosition = rowSize - 1;}else {startPosition = (i * singleThreadDealCount);endPosition = (i + 1) * singleThreadDealCount;}//多线程处理list数据ExcelThread excelThread = new ExcelThread(startPosition,endPosition,list,countDownLatch);executorService.execute(excelThread);}try{countDownLatch.await();}catch (Exception e){log.error("多线程执行失败");}executorService.shutdown();long endTime = System.currentTimeMillis();log.info("总耗时:{}",(endTime - startTime));}
}
3.thread
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CountDownLatch;@Slf4j
@Component
public class ExcelThread implements Runnable{//线程开始处理的位置private int startPosition;//线程结束位置private int endPosition;/*** 多线程集合*/private List<ExcelEntity> list = Collections.synchronizedList(new ArrayList<>());private CountDownLatch count;public ExcelThread(){}public ExcelThread(int startPosition, int endPosition, List<ExcelEntity> list, CountDownLatch count) {this.startPosition = startPosition;this.endPosition = endPosition;this.list = list;this.count = count;}@Overridepublic void run() {List<ExcelEntity> entityList = list.subList(startPosition,endPosition);//处理list数据集合count.countDown();}
}
4.ExcelEntity
import lombok.Data;@Data
public class ExcelEntity {
}
5.ExcelController
import com.alibaba.excel.EasyExcel;
import com.example.springbootexcel.eneity.ExcelEntity;
import com.example.springbootexcel.listener.ExcelListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;@Slf4j
@RestController
@RequestMapping(value = "/excel")
public class ExcelController {@GetMapping(value = "/import")public String importExcel(@RequestParam("file")MultipartFile file){try {EasyExcel.read(file.getInputStream(), ExcelEntity.class,new ExcelListener()).sheet().doRead();} catch (IOException e) {log.info("读取excel失败");}return "test";}
}
相关文章:
spring boot easyexcel
1.pom <!-- easyexcel 依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.projectlombok</group…...
Docker 部署 ShardingSphere-Proxy 数据库中间件
文章目录 Github官网文档ShardingSphere-Proxymysql-connector-java 驱动下载conf 配置global.yamldatabase-sharding.yamldatabase-readwrite-splitting.yamldockerdocker-compose.yml Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为…...
Qt常用快捷键
Qt中的常用快捷键 F1查看帮助F2快速到变量声明 从cpp→hShift F2 函数的声明和定义之间快速切换 ;选中函数名 ,从h→cppF4在 cpp 和 h 文件切换 Shift F4在cpp/h文件与 界面文件中切换Ctrl /注释当前行 或者选中的区域Ctrl I自动缩进当前…...
关于RiboSeq分析流程的总结
最近关注了一下RiboSeq的分析方法,方法挺多的,但是无论哪种软件,都会存在或多或少的问题,一点问题不存在的软件不存在,问题的原因出在,1.有的脚本是用python2编写的,目前python2已经不能用了 2.…...
NLP任务:情感分析、看图说话
我可不向其他博主那样拖泥带水,我有代码就直接贴在文章里,或者放到gitee供你们参考下载,虽然写的不咋滴,废话少说,上代码。 gitee码云地址: 卢东艺/pytorch_cv_nlp - 码云 - 开源中国 (gitee.com)https:/…...
Linux桌面溯源
X窗口系统(X Window System) Linux起源于X窗口系统(X Window System),亦即常说的X11,因其版本止于11之故。 X窗口系统(X Window System,也常称为X11或X)是一种以位图方式显示的软件窗口系统。…...
深入Linux:权限管理与常用命令详解
文章目录 ❤️Linux常用指令🩷zip/unzip指令🩷tar指令🩷bc指令🩷uname指令🩷shutdown指令 ❤️shell命令以及原理❤️什么是 Shell 命令❤️Linux权限管理的概念❤️Linux权限管理🩷文件访问者的分类&#…...
Mojo 编程语言:AI开发者的新宠儿
Mojo(Meta Object Oriented programming for Java Objects)是一种面向对象的编程语言,旨在简化和加速Java应用程序的开发过程。作为近年来新兴的编程语言,Mojo因其与Java的紧密集成以及AI开发领域的应用潜力而逐渐成为AI开发者的新…...
ARM/Linux嵌入式面经(十):极氪
开篇强调两个事情: pdf文件都在百度网盘群:911289806一定要把超链接里面的文章看了,那都是为了你们写的。老板!!!现在多学点,涨个2k工资,真的很值得。要不吃学习的苦,要不吃生活的苦。 1. 自我介绍 专开新篇,等我! 2. 项目介绍,提问 专开新篇,等我! 3. SPI通信和…...
【PVE】新增2.5G网卡作为主网卡暨iperf测速流程
【PVE】新增2.5G网卡作为主网卡暨iperf测速流程 新增网卡 新增网卡的首先当然需要关闭PVE母机,把新网卡插上,我用淘宝遥现金搞了个红包,花了26元买了块SSU的2.5G网卡。说实话这个价位连散热片都没有,确实挺丐的。稍后测下速度看…...
数学建模美赛入门
数学建模需要的学科知识 高等数学线性代数 有很多算法的掌握是需要高等数学和线代的相关知识 如:灰色预测模型需要微积分知识;神经网络需要用到导数知识;图论和层次分析法等都需要用到矩阵计算的相关知识等; 概率论与数理统计&am…...
两段序列帧动画播放,在ios机型上出现闪屏
使用场景:两段序列帧动画连接播放,先播放第一段播一次,再播放第二段,第二段循环播放,在ios机型上出现动画闪动,播放不正常。 错误的写法:把每一段序列帧动画单独写在了定义的动画里 .gacha-bg…...
【C++深度探索】全面解析多态性机制(二)
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:C从入门至进阶 这里将会不定期更新有关C/C的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 前言 我…...
MySQL配置数据库的连接命令
MySQL配置数据库连接命令 在MySQL中,配置数据库连接的命令涉及创建用户、授予权限、配置主从复制等多个方面。以下是常用的命令及其用途: 创建用户 创建一个新的数据库用户并为其设置密码: CREATE USER usernamehost IDENTIFIED BY passwo…...
[PaddlePaddle飞桨] PaddleSpeech-自动语音识别-小模型部署
PaddleSpeech的GitHub项目地址 环境要求: gcc > 4.8.5 paddlepaddle < 2.5.1 python > 3.8 OS support: Linux(recommend), Windows, Mac OSXpip下载指令: python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.c…...
redis查询慢,你们是如何排查优化的?(总结篇)
1,先进行基准测试,查看redis是否存在查询过慢情况,根据自己的情况而定 2、检查网络连接是否出现延迟,数据丢包问题(可能性小 3、开启慢查询日志,通过日志可以清楚知道哪些命令比较耗时,同时避…...
Docker 容器出现 IP 冲突
Docker 容器出现 IP 冲突的情况可能由以下几个原因导致: 静态 IP 分配:如果你在 docker-compose.yml 文件中为多个容器手动设置了相同的静态 IP 地址,那么这些容器在启动时就会出现 IP 冲突。确保每个容器分配的静态 IP 地址是唯一的。桥接网…...
paddlepaddle2.6,paddleorc2.8,cuda12,cudnn,nccl,python10环境
1.安装英伟达显卡驱动 首先需要到NAVIDIA官网去查自己的电脑是不是支持GPU运算。 网址是:CUDA GPUs | NVIDIA Developer。打开后的界面大致如下,只要里边有对应的型号就可以用GPU运算,并且每一款设备都列出来相关的计算能力(Compu…...
【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(上)
当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js?1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形1.2.3 Canvas 与 WebGL1.2.4 CSS1.2.5 JavaScript1.2.6 Node 与 JavaScript 框架1.2.7 Observable 记事本 1…...
如何在Linux上如何配置虚拟主机
在Linux上配置虚拟主机可以通过使用Apache HTTP服务器来实现。Apache是一个开源的跨平台的Web服务器软件,可以在多种操作系统上运行并支持虚拟主机的配置。 以下是在Linux上配置虚拟主机的步骤: 安装Apache HTTP服务器 在终端中运行以下命令来安装Apache…...
保姆级教程:用C++和Eigen库手搓一个URDF机器人正解器(以Franka Panda为例)
从零实现URDF机器人正解器:C与Eigen实战指南(Franka Panda案例) 机械臂末端执行器的精准定位是机器人控制的基础。本文将带你用C和Eigen库,不依赖ROS等框架,从零构建一个完整的URDF解析与正运动学计算系统。我们会以F…...
AgentScope Java:阿里开源的多智能体框架,让AI应用开发变得简单
为什么我们需要Agent框架? 如果你开发过AI应用,一定遇到过这些问题: LLM只能生成文本,无法查询数据库、调用API、执行计算多轮对话需要管理上下文,但手动维护消息历史太繁琐复杂的任务需要多步推理,简单的…...
高并发场景下的FUTURE POLICE服务架构设计
高并发场景下的FUTURE POLICE服务架构设计 最近和几个做智能语音项目的朋友聊天,大家普遍遇到一个头疼的问题:模型效果不错,但用户一多,服务就卡顿甚至崩溃。特别是像FUTURE POLICE这类语音合成模型,生成一段高质量的…...
HY-Motion 1.0效果对比:相比MotionDiffuse在动作连贯性上提升35%
HY-Motion 1.0效果对比:相比MotionDiffuse在动作连贯性上提升35% 1. 模型概述 HY-Motion 1.0是基于流匹配技术的3D动作生成大模型,代表了文本到3D动作生成领域的最新突破。这个模型系列采用了Diffusion Transformer(DiT)和流匹配…...
GLM-OCR计算机视觉基石:理解其背后的计算机网络通信
GLM-OCR计算机视觉基石:理解其背后的计算机网络通信 你是不是也遇到过这种情况:本地跑GLM-OCR模型好好的,一部署到服务器上,调用就变得时快时慢,偶尔还来个超时错误?看着日志里那些“连接失败”、“请求超…...
Flexible H-Tree实战:如何在复杂SoC设计中实现低延迟时钟分布(附Cadence Innovus配置指南)
Flexible H-Tree实战:复杂SoC设计中的低延迟时钟分布艺术 时钟网络就像芯片的神经系统,每一个脉冲都决定着数十亿晶体管的协同工作。在28nm以下的复杂SoC设计中,时钟分布网络的设计难度呈指数级增长——宏单元的不规则分布、跨电压域时序收敛…...
Python实战:用SLSQP算法搞定6个数据点的非线性拟合(附完整代码)
Python实战:SLSQP算法在小样本非线性拟合中的卓越表现 当面对仅有六个数据点的非线性拟合难题时,传统梯度下降方法往往捉襟见肘。本文将带您深入探索SLSQP算法如何在这种具有挑战性的场景中展现出独特优势,通过完整代码示例和误差对比分析&am…...
SillyTavern角色系统全解析:从基础构建到高级定制
SillyTavern角色系统全解析:从基础构建到高级定制 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 引言:当AI角色拥有"灵魂" 想象一下,你正在…...
无需复杂配置!TensorFlow-v2.9镜像带你快速体验GPU加速训练
无需复杂配置!TensorFlow-v2.9镜像带你快速体验GPU加速训练 1. TensorFlow-v2.9镜像简介 TensorFlow是由Google Brain团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。TensorFlow-v2.9镜像基于TensorFlow 2.9版本构建,提供了…...
QWen 3.5plus总结的总结基准测试结果的正确方法
原文地址:https://dl.acm.org/doi/epdf/10.1145/5666.5673 如何用统计撒谎:总结基准测试结果的正确方法 作者:PHILIP J. FLEMING 和 JOHN J. WALLACE 在文献中,性能结果经常使用性能比率的算术平均值来总结,在某些情况…...
