You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用跟踪已读文件避免数据库重复入库的方案及Maven依赖咨询

解决方案:跟踪已读取的JSON文件避免数据库重复插入

核心跟踪实现方式

1. 数据库记录表跟踪(推荐,适用于生产环境)

创建一张专门的记录表(比如processed_files),用来存储已处理的文件信息,字段建议包含:

  • file_name:文件名(设为唯一约束)
  • file_path:文件完整路径(可选,避免同名文件冲突)
  • processed_timestamp:处理时间
  • file_hash:文件哈希值(可选,用于检测文件是否被修改后重新处理)

实现逻辑:

  • 应用启动时(通过ApplicationRunner或CommandLineRunner)扫描目标目录下的所有JSON文件
  • 将扫描到的文件与processed_files表中的记录对比,筛选出未存在的文件
  • 处理未记录的文件(解析JSON、插入数据库),处理完成后将文件信息写入记录表
  • 若要支持文件修改后重新处理,可在对比时校验哈希值,不一致则重新执行处理并更新记录

2. 文件系统标记法(轻量方案)

无需修改数据库,通过文件本身或目录来标记状态:

  • 目录分离:创建unprocessed和processed两个目录,未处理的JSON放在unprocessed,处理完成后移动到processed目录
  • 后缀标记:处理完成后给文件名添加后缀(比如data.json改为data.json.processed),启动时只扫描不带该后缀的JSON文件

3. 配置文件记录(仅适用于小型单实例场景)

在application.yml或application.properties中手动记录已处理的文件名列表:

processed-files:
  - data1.json
  - data2.json

启动时读取这个配置项,对比目录中的文件,处理未在列表中的文件后更新配置。此方案缺点明显:配置文件维护麻烦,多实例部署时无法同步状态。

Spring Boot 相关Maven依赖

数据库跟踪所需依赖

如果采用数据库记录表方案,需要Spring Data JPA和对应数据库的驱动:

<!-- Spring Data JPA 提供ORM及数据访问支持 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL 驱动(根据实际使用的数据库替换,比如PostgreSQL、H2等) -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

可选工具依赖

如果需要简化文件扫描、移动等操作,可引入Apache Commons IO:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.15.1</version>
</dependency>

注意事项

  • 数据库方案中,处理文件与插入记录需放在同一个事务中,避免处理成功但记录未写入导致重复处理
  • 哈希值计算可使用MessageDigest类实现,确保文件内容变更时能被检测到
  • 多实例部署场景下,优先选择数据库记录表方案,避免文件系统标记的状态不一致问题

内容的提问来源于stack exchange,提问作者Robert Głowacki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 13:12:47