Spring启动任务计划删除包含父文件夹的数百万个旧文件

时间:2017-08-01 16:57:59

标签: spring-boot

想要在50到300天之间删除数百万个旧文件,如果我使用简单的spring任务,那么性能开销也会用于删除带文件夹的文件。删除再次需要递归方法的文件夹。

什么方法会很好,任何建议或解决方案。

1 个答案:

答案 0 :(得分:2)

我不确定我是否完全理解你的问题,但这里是一个Spring Boot应用程序中的一个计划任务的例子,它以递归的方式查找所有文件,从根路径开始,然后删除任何尚未存在的文件在过去50天内修改过。

此任务每10秒运行一次。

@Service
public class FileService {

    @Scheduled(fixedDelay = 10000)
    public void deleteFilesScheduledTask() throws IOException {
        findFiles("C:/testing");
    }

    public void findFiles(String filePath) throws IOException {
        List<File> files = Files.list(Paths.get(filePath))
                                .map(path -> path.toFile())
                                .collect(Collectors.toList());
        for(File file: files) {
            if(file.isDirectory()) {
                findFiles(file.getAbsolutePath());
            } else if(isFileOld(file)){
                deleteFile(file);
            }
        }

    }

    public void deleteFile(File file) {
        file.delete();
    }

    public boolean isFileOld(File file) {
        LocalDate fileDate = Instant.ofEpochMilli(file.lastModified()).atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate oldDate = LocalDate.now().minusDays(50);
        return fileDate.isBefore(oldDate);
    }
}

希望这能让您了解如何在自己的应用中实现此功能。