Java后端
·06-15 14:39标题:请教:FTP 定时增量下载 Excel 解析入库场景,合理的项目结构与实现方案
一、业务背景
目前需要做一个数据同步模块:从远端 FTP 服务器批量下载 .xlsx 文件,解析文件内容后写入业务数据库表,同时在 download_record 表中记录每个文件的下载和处理状态。后续会新增定时任务,每 3 分钟执行一次同步。
二、核心约束与前提
文件命名规则:所有 Excel 文件均按时间命名,格式为 yyyyMMdd_HHmmss.xlsx(例如 20260615_075805.xlsx),文件名随时间严格递增,不会出现更早时间的文件。
去重要求:已经下载并解析成功的文件不能重复执行,支持增量同步,即每次只处理上一次成功时间点之后新增的文件。
持久化记录:数据库有 download_record 表,用于记录文件名、下载时间、处理状态(成功 / 失败)、失败原因等信息。
执行频率:通过定时任务每 3 分钟触发一次全量检查 + 增量处理。
三、我目前的初步想法
技术栈打算用 Spring Boot,定时任务先用 @Scheduled 实现。
FTP 连接准备用 Apache Commons Net,Excel 解析用 EasyPOI / EasyExcel。
增量逻辑初步想法:每次执行时先查 download_record 表拿到最近一次成功的文件名 / 时间,再去 FTP 列出所有文件,筛选出时间大于该值的文件逐个下载处理。
每处理完一个文件就往 download_record 写入一条成功记录,失败则记录失败状态。
四、想请教的问题
项目结构怎么划分比较合理规范?比如 FTP 操作、Excel 解析、数据库入库、定时任务这几块,包结构 / 分层应该怎么设计,职责边界更清晰?
增量下载 + 去重的最佳实现方式是什么?靠文件名比对 + 数据库记录最大时间的方式是否靠谱,有没有更优雅、容错性更好的方案?
下载 → 解析 → 入库 整条链路的事务和异常处理应该怎么设计?比如 FTP 下载成功但解析失败、解析成功但入库失败,分别怎么处理,需不需要重试,状态怎么回写?
定时任务这一块,单次执行超时、FTP 连接失败、文件量突增这类异常场景,通常怎么处理比较稳妥?
感谢各位大佬分享经验和思路!
3
1
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
