欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Task定時(shí)任務(wù)的實(shí)現(xiàn)詳解

 更新時(shí)間:2022年08月10日 10:55:21   作者:小薛的BUG日志  
這篇文章主要介紹了SpringBoot定時(shí)任務(wù)功能詳細(xì)解析,這次的功能開發(fā)過程中也算是對(duì)其內(nèi)涵的進(jìn)一步了解,以后遇到定時(shí)任務(wù)的處理也更清晰,更有效率了,對(duì)SpringBoot定時(shí)任務(wù)相關(guān)知識(shí)感興趣的朋友一起看看吧

Spring Task定時(shí)任務(wù)

Cron表達(dá)式

以6-7位的一組數(shù)字,中間用空格間隔的字符串,表達(dá)一種時(shí)間

每位的含義及取值范圍:

秒(0-59) 分(0-59) 時(shí)(0-23) 日(1-31) 月(1-12) 周(1-7或SUN-SAT) 年(四位數(shù),可省略)

符號(hào)的含義:

  1. *表示所有值(秒位是*,則表示每秒)
  2. ?表示未說明的值,(日和周必須有一位為?,因?yàn)椴缓线壿?
  3. -表示一個(gè)指定的范圍
  4. ,表示一個(gè)可能值
  5. /符號(hào)前表示開始時(shí)間,符號(hào)后表示每次遞增的值
  6. L最后的,在’天’上表示這個(gè)月最后一天,用在’周’上表示’7或SUN’,在周上與數(shù)字一起,如"7L"表示這個(gè)月的最后一個(gè)周六(阿麥利卡日歷,1表示周日)
  7. W只能用在’天’上, 用來(lái)描敘最接近指定天的工作日(周一到周五) ,如"15W"指"最近接這個(gè)月第15天的工作日",如果第15天是周六,那么會(huì)在第14天即周五觸發(fā)
  8. # 只能在’周’上使用,用來(lái)指定這個(gè)月的第幾個(gè)周幾,如’6#3’表示這個(gè)月的第三個(gè)周五(6表示周五,3表示第三周).如果指定日期不存在,那么將不會(huì)觸發(fā)
  9. C指和canlendar聯(lián)系后計(jì)算過的值,如在’天’上標(biāo)注’5C’指這個(gè)月第五天或之后包括canlendar的第一天;在’周’上標(biāo)’1C’指這周日或之后包括calendar的第一天.

當(dāng)然不理解也沒關(guān)系,網(wǎng)上一搜就有很多Cron表達(dá)式在線生成器

實(shí)現(xiàn)定時(shí)任務(wù)

背景

使用異步進(jìn)行文件上傳,將獲取token文件存到數(shù)據(jù)庫(kù)中,如果用戶在提交表單之前反復(fù)上傳文件會(huì)產(chǎn)生很多僵尸數(shù)據(jù),需要使用定時(shí)任務(wù)刪除僵尸token字段和上傳到服務(wù)器的圖片

實(shí)現(xiàn)

開啟任務(wù)調(diào)度

@EnableScheduling //開啟任務(wù)調(diào)度
@SpringBootApplication
public class UploadApplication {
    public static void main(String[] args) {
        SpringApplication.run(UploadApplication.class, args);
    }
}

編寫清除僵尸token業(yè)務(wù)

//mapper
//獲取僵尸token的id
List<Integer> selectDeadTokens();
//清除僵尸數(shù)據(jù)
int deleteDeadToken(@Param("ids") List<Integer> ids);
<delete id="deleteDeadToken">
       delete from imagetoken where id in
       <foreach collection="ids" item="e" open="(" separator="," close=")">
           #{e}
       </foreach>
</delete>
<select id="selectDeadTokens" resultType="java.lang.Integer">
        SELECT id FROM imagetoken t
        WHERE t.token NOT IN (select token FROM good)
</select>
//service 
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.SERIALIZABLE)
    @Override
    public void deleteDeadToken() {
        System.out.println("---開始清除所有僵尸token---");
        List<Integer> list = imagetokenMapper.selectDeadTokens();
        System.out.println("已找到"+list.size()+"條數(shù)據(jù)");
        if (list.size()>0) {
            int result = imagetokenMapper.deleteDeadToken(list);
            System.out.println("本次刪除"+result+"條數(shù)據(jù)");
        }
    }

查找數(shù)據(jù)庫(kù)中存放文件地址的集合

 @Override
    public List<String> getList() {
        //條件構(gòu)造器 查存放地址
        LambdaQueryWrapper<Good> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.select(Good::getSavepath);
        //this指的是當(dāng)前service
        List<Good> list = this.list(queryWrapper);
//        System.out.println("查詢到的數(shù)據(jù):");
//        System.out.println(list);
        //獲取數(shù)據(jù)庫(kù)中所有圖片的絕對(duì)路徑List<String>
        ArrayList<String> paths = new ArrayList<>();
        //將查到的數(shù)據(jù)中的文件地址遍歷到String類型的list中
        list.stream().forEach(good -> {
            paths.add(good.getSavepath());
        });
        //System.out.println("查到的路徑:"+paths);
        return  paths;
    }

使用@Scheduled注解開啟任務(wù)調(diào)度

@Value("${image.savepath}")
    String savePath;
    /**
     * 每天晚上23點(diǎn)清除無(wú)效token數(shù)據(jù)并刪除圖片
     */
    @Scheduled(cron = "0 0 23 * * ?")
    public void delete(){
        //1.清除無(wú)效token
        imagetokenService.deleteDeadToken();
        //2.刪除僵尸文件
        //2.1獲取數(shù)據(jù)庫(kù)中文件存儲(chǔ)列表
        List<String> paths = goodService.getList();
        //2.2 獲取圖片存儲(chǔ)地址
        File target=new File(savePath);
        //2.3遍歷圖片存儲(chǔ)所在文件夾的文件
        File[] files=target.listFiles();
        for (File file : files) {
            if (file.isFile()){
                //2.4獲取存儲(chǔ)文件的絕對(duì)地址,需要將盤符修改,
                String absPath = file.getAbsolutePath().replaceAll("\\\\", "/");
                //2.5將不存在的文件刪除
                if(!paths.contains(absPath)){
                     //System.out.println("要?jiǎng)h除文件的覺得路徑:"+absPath);
                     file.delete();
                 }
            }
        }
    }

到此這篇關(guān)于Spring Task定時(shí)任務(wù)的實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Spring定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ActiveMQ整合Spring入門用法解析

    ActiveMQ整合Spring入門用法解析

    這篇文章主要介紹了ActiveMQ整合Spring入門用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java讀取并下載網(wǎng)絡(luò)文件的方法

    Java讀取并下載網(wǎng)絡(luò)文件的方法

    這篇文章主要為大家詳細(xì)介紹了Java讀取并下載網(wǎng)絡(luò)文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • spring?cloud?eureka注冊(cè)原理-注冊(cè)失敗填坑筆記

    spring?cloud?eureka注冊(cè)原理-注冊(cè)失敗填坑筆記

    這篇文章主要介紹了spring?cloud?eureka注冊(cè)原理-注冊(cè)失敗填坑筆記,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • springboot開發(fā)擴(kuò)展springmvc實(shí)現(xiàn)解析

    springboot開發(fā)擴(kuò)展springmvc實(shí)現(xiàn)解析

    這篇文章主要介紹了springboot開發(fā)擴(kuò)展springmvc實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 利用Jackson實(shí)現(xiàn)數(shù)據(jù)脫敏的示例詳解

    利用Jackson實(shí)現(xiàn)數(shù)據(jù)脫敏的示例詳解

    在我們的企業(yè)項(xiàng)目中,為了保護(hù)用戶隱私,數(shù)據(jù)脫敏成了必不可少的操作,那么我們?cè)趺磧?yōu)雅的利用Jackson實(shí)現(xiàn)數(shù)據(jù)脫敏呢,本文就來(lái)和大家詳細(xì)聊聊,希望對(duì)大家有所幫助
    2023-05-05
  • java連接池Druid獲取連接getConnection示例詳解

    java連接池Druid獲取連接getConnection示例詳解

    這篇文章主要為大家介紹了java連接池Druid獲取連接getConnection示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java 字符串的拼接詳解

    Java 字符串的拼接詳解

    本文主要介紹Java 字符串的拼接知識(shí)內(nèi)容,這里整理了相關(guān)資料,及簡(jiǎn)單的示例代碼,有興趣的小伙伴可以參考下
    2016-08-08
  • 基于SpringBoot實(shí)現(xiàn)IP黑白名單的詳細(xì)步驟

    基于SpringBoot實(shí)現(xiàn)IP黑白名單的詳細(xì)步驟

    IP黑白名單是網(wǎng)絡(luò)安全管理中常見的策略工具,用于控制網(wǎng)絡(luò)訪問權(quán)限,根據(jù)業(yè)務(wù)場(chǎng)景的不同,其應(yīng)用范圍廣泛,比如比較容易被盜刷的短信接口、文件接口,都需要添加IP黑白名單加以限制,所以本文給大家介紹了基于SpringBoot實(shí)現(xiàn)IP黑白名單的詳細(xì)步驟,需要的朋友可以參考下
    2024-01-01
  • Apache?Maven3.6.0的下載安裝和環(huán)境配置(圖文教程)

    Apache?Maven3.6.0的下載安裝和環(huán)境配置(圖文教程)

    本文主要介紹了Apache?Maven3.6.0的下載安裝和環(huán)境配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Maven?pom.xml文件獲取當(dāng)前時(shí)間戳方式

    Maven?pom.xml文件獲取當(dāng)前時(shí)間戳方式

    這篇文章主要介紹了Maven?pom.xml文件獲取當(dāng)前時(shí)間戳方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論