【EasyPan】回收站清理定时任务代码分析

【EasyPan】项目常见问题解答(自用&持续更新中…)汇总版

一、代码结构概览

该定时任务实现了自动清理回收站中过期文件的功能,主要包含:

  1. 定时任务配置
  2. 过期文件查询
  3. 按用户分组处理
  4. 批量删除操作

二、核心代码解析

@Component
public class FileCleanTask {

    @Resource
    private FileInfoService fileInfoService;

    @Scheduled(fixedDelay = 1000 * 60 * 3)
    public void execute() {
        // 1. 构建查询条件
        FileInfoQuery fileInfoQuery = new FileInfoQuery();
        fileInfoQuery.setDelFlag(FileDelFlagEnums.RECYCLE.getFlag());
        fileInfoQuery.setQueryExpire(true);
        
        // 2. 查询过期文件
        List<FileInfo> fileInfoList = fileInfoService.findListByParam(fileInfoQuery);
        
        // 3. 按用户分组
        Map<String, List<FileInfo>> fileInfoMap = fileInfoList.stream()
            .collect(Collectors.groupingBy(FileInfo::getUserId));
            
        // 4. 批量删除处理
        for (Map.Entry<String, List<FileInfo>> entry : fileInfoMap.entrySet()) {
            List<String> fileIds = entry.getValue().stream()
                .map(p -> p.getFileId())
                .collect(Collectors.toList());
                
            fileInfoService.delFileBatch(
                entry.getKey(), 
                String.join(",", fileIds), 
                false
            );
        }
    }
}

三、关键组件分析

1. 定时任务配置

@Scheduled(fixedDelay = 1000 * 60 * 3)
  • 执行频率:每3分钟执行一次(180,000毫秒)
  • 执行策略:fixedDelay确保上次执行完成后间隔指定时间再执行
  • 线程模型:默认使用单线程定时任务执行器

2. 查询条件构建

fileInfoQuery.setDelFlag(FileDelFlagEnums.RECYCLE.getFlag());
fileInfoQuery.setQueryExpire(true);
  • 回收站标识:筛选状态为"回收站"的文件
  • 过期标记queryExpire=true表示只查询已过期的文件

3. 数据处理流程

Map<String, List<FileInfo>> fileInfoMap = fileInfoList.stream()
    .collect(Collectors.groupingBy(FileInfo::getUserId));
  • 分组策略:按用户ID分组处理
  • 优势
    • 避免混用不同用户的数据
    • 便于实现用户级别的批量操作
    • 减少数据库事务冲突

4. 批量删除操作

fileInfoService.delFileBatch(
    entry.getKey(), 
    String.join(",", fileIds), 
    false
);
  • 参数说明
    • entry.getKey(): 用户ID
    • String.join(",", fileIds): 逗号分隔的文件ID列表
    • false: 表示不是管理员操作
  • 特点
    • 使用批量删除提高效率
    • 保持用户数据隔离
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值