国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

硬核實戰!SpringBoot + Minio 定時清理,輕松奪回海量存儲空間!

存儲 存儲架構
如果我們不對這些“過期文件”進行定期清理,不僅存儲成本會增加,還可能影響系統長期運行的可維護性。因此,本文將通過?SpringBoot + MinIO + 定時任務?的方式,實現一個自動清理歷史文件的功能。

在日常開發中,我們往往選擇 MinIO 作為項目的圖片或文件存儲服務。它不僅兼容 S3 協議,還能在本地快速搭建分布式存儲環境,方便又高效。 但隨著業務增長,存儲在 MinIO 中的圖片會呈現 指數級上漲:活動頁上傳的 Banner、用戶頭像歷史版本、報表導出的臨時文件……一段時間后,它們大多不再被使用,卻依舊占據存儲空間。

如果我們不對這些“過期文件”進行定期清理,不僅存儲成本會增加,還可能影響系統長期運行的可維護性。因此,本文將通過 SpringBoot + MinIO + 定時任務 的方式,實現一個自動清理歷史文件的功能。

最終效果:

  • 文件按日期目錄(yyyy-MM-dd/)存儲
  • 每月定時任務執行,清理掉早于指定時間的目錄
  • 自動釋放存儲空間,降低成本

項目依賴

在 pom.xml 中添加核心依賴即可:

<!-- MinIO SDK -->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.1</version>
</dependency>

說明:

  • MinIO SDK:與 MinIO 服務交互,支持上傳、下載、刪除等操作
  • Spring Boot Starter:內置定時任務支持,免額外引入依賴

核心刪除邏輯

文件的目錄結構約定為:

/bucketName/yyyy-MM-dd/xxx.jpeg

也就是說,每天的文件會放到一個獨立的日期目錄下。 因此我們的目標是:刪除早于指定日期的整個目錄。

工具類 MinioUtil

項目路徑:

/src/main/java/com/icoderoad/utils/MinioUtil.java

核心方法:

方法簽名

作用

返回值

冪等性

deleteDateFoldersBefore(LocalDate endExclusive)

刪除截止日期前的所有日期目錄

實際刪除對象數

多次調用結果一致

deleteSingleFolder(String prefix)

刪除單個日期目錄下的對象

刪除數量

同上

關鍵代碼:

/**
 * 刪除早于指定日期的所有日期目錄(yyyy-MM-dd/)
 *
 * @param endExclusive 截止日期(不含)
 * @return 實際刪除的對象總數
 */
public int deleteDateFoldersBefore(LocalDate endExclusive) {
    if (endExclusive == null) {
        throw new IllegalArgumentException("指定日期不能為空");
    }
    LocalDate today = LocalDate.now();
    if (!endExclusive.isBefore(today)) {
        return 0;
    }


    int totalDeleted = 0;
    for (LocalDate d = endExclusive.minusDays(1); !d.isBefore(retainSince); d = d.minusDays(1)) {
        totalDeleted += deleteSingleFolder(d.format(DateTimeFormatter.ISO_LOCAL_DATE) + "/");
    }
    return totalDeleted;
}

刪除單個目錄;

private int deleteSingleFolder(String prefix) {
    try {
        List<DeleteObject> objects = new ArrayList<>();
        minioClient.listObjects(
                ListObjectsArgs.builder().bucket(bucketName).prefix(prefix).recursive(true).build()
        ).forEach(r -> {
            try {
                objects.add(new DeleteObject(r.get().objectName()));
            } catch (Exception ignored) {
                log.warn("文件名獲取失敗");
            }
        });


        if (objects.isEmpty()) {
            return 0;
        }


        Iterable<Result<DeleteError>> results = minioClient.removeObjects(
                RemoveObjectsArgs.builder().bucket(bucketName).objects(objects).build()
        );


        for (Result<DeleteError> res : results) {
            res.get(); // 必須觸發懶加載請求
        }
        return objects.size();
    } catch (Exception e) {
        log.warn("刪除目錄 {} 失敗: {}", prefix, e.toString());
        return 0;
    }
}

性能與容錯

  • 懶加載陷阱:listObjects 與 removeObjects 均是延遲執行,必須遍歷結果才會真正觸發請求
  • 批量刪除限制:MinIO 單次請求最多刪除 1000 個對象
  • 冪等性設計:重復刪除同一路徑不會報錯,已刪除的對象會被跳過
  • 常見錯誤處理:

NoSuchBucket → 啟動時校驗桶

AccessDenied → 確認 AK/SK 權限

SlowDown → 增加退避重試策略

單元測試

路徑:/src/test/java/com/icoderoad/MinioTest.java

@SpringBootTest
public class MinioTest {


    @Autowired
    private MinioUtil minioUtil;


    @Test
    public void testDelete() {
        int count = minioUtil.deleteDateFoldersBefore(LocalDate.of(2025, 8, 2));
        System.out.println("刪除文件數量:" + count);
    }
}

定時任務配置

啟用定時任務

在啟動類中開啟:

@SpringBootApplication
@EnableScheduling
public class StorageApplication {
    public static void main(String[] args) {
        SpringApplication.run(StorageApplication.class, args);
    }
}

定時任務類

路徑:/src/main/java/com/icoderoad/task/MinioCleanTask.java

@Component
@RequiredArgsConstructor
@Slf4j
public class MinioCleanTask {


    private final MinioUtil minioUtil;


    /**
     * 每月 1 號凌晨 3 點清理早于當天的目錄
     */
    @Scheduled(cron = "0 0 3 1 * ?")
    public void minioClean() {
        try {
            LocalDate today = LocalDate.now();
            log.info("清理任務開始,清理日期:{}", today);
            int deleteCount = minioUtil.deleteDateFoldersBefore(today);
            log.info("任務完成,共清理 {} 個文件", deleteCount);
        } catch (Exception e) {
            log.error("MinIO 清理任務失敗", e);
        }
    }
}

Cron 表達式快速回顧

表達式

含義

0 * * * * ?

每分鐘執行一次

0 */5 * * * ?

每 5 分鐘執行一次

0 0 1 * * ?

每天凌晨 1 點執行

0 0 3 1 * ?

每月 1 日凌晨 3 點執行

結論

通過 SpringBoot + MinIO + 定時任務 的組合,我們實現了一個高效的存儲清理方案:

  • 自動化:無需人工干預,定時任務定期清理
  • 可控性:基于日期前綴,刪除邏輯清晰,冪等性保證安全
  • 擴展性:可靈活配置保留日期與清理策略

這不僅幫助我們 節省了大量存儲成本,還提升了系統的長期可維護性。 對于任何依賴對象存儲的系統而言,這種清理機制都是必不可少的。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-09-29 09:32:32

2021-09-18 10:48:29

手機內存微信

2024-07-31 09:34:59

2021-06-25 18:42:11

云主機

2020-09-07 14:08:36

Windows 10存儲空間硬盤

2021-10-15 22:24:25

微信功能存儲

2017-12-04 08:37:31

存儲空間NAS

2024-03-27 07:55:58

SpringRedis海量

2019-04-26 15:38:34

Hadoop集群存儲

2018-06-27 14:40:50

Windows 10Windows存儲空間

2013-03-04 09:55:18

大數據存儲

2015-12-15 15:38:57

Windows 10存儲空間微軟

2012-11-06 09:31:12

2017-11-03 14:44:20

對象存儲

2022-03-11 09:47:17

Google手機空間應用歸檔

2022-03-16 12:49:28

IT數據存儲

2018-08-15 15:50:03

Windows 10存儲空間應用程序

2021-09-04 21:12:36

移動云數據安全

2020-04-27 14:17:00

iPhone SE蘋果存儲

2021-05-19 07:59:35

VDO存儲Centos8
點贊
收藏

51CTO技術棧公眾號

国产真实乱子伦精品视频| 麻豆国产欧美一区二区三区| 精品不卡在线视频| 在线观看黄色小视频| 国产成都精品91一区二区三| 青青草原亚洲| 影音国产精品| 国产精成人品localhost| 国产欧美一区二区三区精品观看 | 男人av在线播放| 在线视频观看一区| 中文在线二区| 亚洲第一久久影院| 可播放的18gay1069| 亚洲国产精品黑人久久久| 极品美女扒开粉嫩小泬| 成人爽a毛片一区二区免费| 男插女免费视频| 国产精品77777| 久久久久久人妻一区二区三区| 国产麻豆视频一区| 国产av人人夜夜澡人人爽麻豆| 91精品在线免费视频| 国产精品美女www| 一区二区中文字幕在线观看| 99久久综合99久久综合网站| 午夜久久资源| 国产一区二区精品久久91| 992tv成人免费观看| 国产一区二区在线视频| 日本a在线天堂| 国产成人精品三级| 在线观看午夜av| 911精品产国品一二三产区| 欧美揉bbbbb揉bbbbb| 日韩毛片在线免费看| 久久国产精品视频| 成人国产精品免费| 午夜影院观看视频免费| 国产精品久久久久久影视| 欧美成va人片在线观看| 久久99国产乱子伦精品免费| 欧美aa视频| 国产熟人av一二三区| 日本韩国欧美一区| 成人亚洲精品| 成人av影视在线| 成人性生交大片免费看视频在线| 污黄色在线观看| 日韩大陆欧美高清视频区| 日本午夜免费一区二区| 麻豆映画在线观看| 欧美日本中文字幕| 麻豆精品一区二区| 国产女人在线观看| 日本高清+成人网在线观看| 亚洲大片av| 欧美精品尤物在线| 日韩久久久精品| 天天综合精品| 成人性爱视频在线观看| 国产成人在线一区| 日本一区二区高清| jizzzz日本| 中文字幕欧美国内| a在线播放不卡| 国产日韩中文在线中文字幕| 欧美大尺度在线观看| 成人爱爱电影网址| av免费在线视| 老司机色在线视频| 成人免费网视频| 欧美日韩国产麻豆| 国产999精品久久| 黄页视频在线观看| 欧美精品第一页在线播放| 久久精品人人做人人综合| 在线观看视频免费一区二区三区| 俺来俺也去www色在线观看| 国产精品一区二区在线观看 | 日本不卡一区| 国产精品美女久久久久aⅴ| 91蝌蚪精品视频| 黄色漫画在线免费看| 激情五月五月婷婷| 国产亚洲视频在线观看| 日韩欧美在线第一页| 成人欧美在线| 国产一二在线观看| 在线观看亚洲视频啊啊啊啊| 国产麻豆精品一区二区| 涩涩视频免费网站| 亚洲国产精品免费| 免费看成人吃奶视频在线| av日韩在线看| 日韩一区二区三| 久久精品国产99国产| 岛国精品在线| 在线中文字幕视频观看| 色乱码一区二区三在线看| 一区二区三区精品视频| 黑人久久a级毛片免费观看| av最新网址| 亚洲三区四区| 国产精品久久久久久久久久99 | 男女视频在线| 夜夜春亚洲嫩草影视日日摸夜夜添夜 | 伊人久久亚洲| 久久99久久久久久久噜噜| 美女视频免费一区| 香蕉视频在线免费| 91干在线观看| 欧美国产欧美综合| 在线亚洲人成| 亚洲va男人天堂| 91色视频在线| 国产精品一区二区精品| 国产系列第一页| 一区二区三区亚洲| 91理论电影在线观看| 91av一区| 一区二区成人网| 国产欧美精品一区二区| 欧美午夜美女看片| 久久亚洲精精品中文字幕早川悠里| 欧美精品久久久久久久久25p| 日本精品网站| 精品网站999www| 久久亚洲欧美| 国产精品男女| 精品一区毛片| 亚洲影院天堂中文av色| 成人精品一区二区三区电影黑人| 大美女一区二区三区| 成人动漫在线播放| 国产美女搞久久| 亚洲精品精品亚洲| 天堂网av成人| 国内揄拍国内精品| 亚洲精品国久久99热| 婷婷久久国产对白刺激五月99| 未来日记在线观看| 亚洲欧美日韩另类精品一区二区三区 | 日韩人体视频| 国产成人精品三级高清久久91| 久久精品影视| 蜜桃一区二区三区在线观看| 97se亚洲国产综合自在线观| 亚洲欧美电影一区二区| 国产精品欧美一区二区三区| 欧美成人亚洲| 欧美手机在线| 深夜视频一区二区| 国产精品网站在线看| 欧美黄色激情| 国产精品自拍网站| 丁香花在线影院| 正在播放精油久久| 色偷偷噜噜噜亚洲男人的天堂| 北条麻妃一区二区三区| 成人资源在线| 亚洲成人av高清| 视频一区二区在线观看| 尤物yw午夜国产精品视频| 国产精品网站在线| 中国成人一区| 蜜桃av.网站在线观看| av免费网站观看| 国产激情久久久| 91精品国产综合久久久蜜臀粉嫩| 国产激情一区二区三区桃花岛亚洲| 欧美午夜网站| 日本在线一二三| 在线观看视频黄色| 91精品国产91久久久久久最新| 一本大道久久精品懂色aⅴ| 美腿丝袜亚洲三区| 国产精品主播在线观看| 黄色av网站在线看| 国产免费黄色小视频| 国产精品一区久久| 日韩二区三区在线| 亚洲素人一区二区| 可以免费看不卡的av网站| 国产高清日韩| 邻家有女韩剧在线观看国语| 午夜久久久久久久久久久| 欧美在线免费看| 亚洲第一精品电影| 亚洲视频图片小说| 日本欧美一区二区三区乱码 | 亚洲欧美日韩国产成人综合一二三区| 免费不卡在线观看av| 色av成人天堂桃色av| 成人深夜视频在线观看| 欧美日韩亚洲在线观看| 精品国产第一福利网站| 色视频免费在线观看| 人妻有码中文字幕| www 成人av com|