最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring動態(tài)添加定時任務的實現(xiàn)思路

 更新時間:2021年07月10日 10:37:12   作者:huan_1993  
這篇文章主要介紹了Spring動態(tài)添加定時任務的實現(xiàn)思路,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、背景

在工作中,有些時候我們有些定時任務的執(zhí)行可能是需要動態(tài)修改的,比如: 生成報表,有些項目配置每天的8點生成,有些項目配置每天的10點生成,像這種動態(tài)的任務執(zhí)行時間,在不考慮分布式執(zhí)行的情況下,我們可以
使用 Spring Task來簡單的實現(xiàn)。

二、需求和實現(xiàn)思路

1、能夠動態(tài)的添加一個定時任務。

Spring中存在一個類ThreadPoolTaskScheduler,它可以實現(xiàn)根據(jù)一個cron表達式來調度一個任務,并返回一個ScheduledFuture對象。

可以看到返回值是ScheduledFuture對象

2、能夠取消定時任務的執(zhí)行。

通過調用上一步的ScheduledFuturecancel方法,就可以將這個任務取消。

3、動態(tài)的修改任務執(zhí)行的時間。

先取消任務。然后在重新注冊一個任務。

4、獲取定時任務執(zhí)行的異常

ThreadPoolTaskScheduler類中有一個設置ErrorHandler的方法,給自己實現(xiàn)的ErrorHandler即可。

定時任務錯誤處理

提示:

  1. Spring中我們通過@Scheduled注解來實現(xiàn)的定時任務,底層也是通過ThreadPoolTaskScheduler來實現(xiàn)的??梢酝ㄟ^ScheduledAnnotationBeanPostProcessor類來查看。
  2. ThreadPoolTaskScheduler的默認線程數(shù)是1,這個需要根據(jù)實際的情況進行修改。

三、代碼實現(xiàn)

此處只給出動態(tài)注冊定時任務和取消的定時任務的代碼。

package com.huan.study.task.jobs.tasks;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronExpression;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

/**
 * @author huan.fu 2021/7/8 - 下午2:46
 */
@Component
@Slf4j
public class DynamicCronTask implements InitializingBean {

    @Autowired
    private ThreadPoolTaskScheduler taskScheduler;


    private ScheduledFuture<?> scheduledFuture;

    @Override
    public void afterPropertiesSet() throws Exception {
        // 動態(tài)啟動一個定時任務
        log.info("注冊一個定時任務:每隔1秒執(zhí)行一次");
        scheduledFuture = register("* * * * * ?");

        // 取消一個調度
        new Thread(() -> {
            try {
                TimeUnit.SECONDS.sleep(5);
                log.info("取消調度");
                scheduledFuture.cancel(false);
                log.info("取消結果:" + scheduledFuture.isCancelled());
                log.info("重新注冊一個定時任務:每隔2秒執(zhí)行一次");
                register("*/2 * * * * ?");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }

    private ScheduledFuture<?> register(String cron) {

        // 高版本使用 CronExpression,低版本使用 CronSequenceGenerator
        boolean validExpression = CronExpression.isValidExpression(cron);
        log.info("cron:[{}]是合法的嗎:[{}]", cron, validExpression);

        CronExpression expression = CronExpression.parse(cron);
        LocalDateTime nextExecTime = expression.next(LocalDateTime.now());
        if (null != nextExecTime) {
            log.info("定時任務下次執(zhí)行的時間為:[{}]", nextExecTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        }

        return taskScheduler.schedule(new Runnable() {
            @Override
            public void run() {
                log.info("我執(zhí)行了");
            }
        }, new CronTrigger(cron));
    }
}

四、執(zhí)行結果

執(zhí)行結果

五、完整代碼

https://gitee.com/huan1993/spring-cloud-parent/tree/master/springboot/springboot-task

到此這篇關于Spring動態(tài)添加定時任務的實現(xiàn)思路的文章就介紹到這了,更多相關Spring定時任務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA返回PDF文件流并進行下載的實現(xiàn)方法

    JAVA返回PDF文件流并進行下載的實現(xiàn)方法

    這篇文章主要給大家介紹了關于JAVA返回PDF文件流并進行下載的實現(xiàn)方法,PDF文件流下載是通過HTTP協(xié)議將服務器上的PDF文件以流的方式發(fā)送給客戶端,供客戶端保存到本地磁盤或直接在瀏覽器中打開,需要的朋友可以參考下
    2024-02-02
  • 淺析Java中Map與HashMap,Hashtable,HashSet的區(qū)別

    淺析Java中Map與HashMap,Hashtable,HashSet的區(qū)別

    HashMap和Hashtable兩個類都實現(xiàn)了Map接口,二者保存K-V對(key-value對);HashSet則實現(xiàn)了Set接口,性質類似于集合
    2013-09-09
  • MyBatisPlus查詢報錯Unknow?column?‘id‘?in?‘field?list‘解決分析

    MyBatisPlus查詢報錯Unknow?column?‘id‘?in?‘field?list‘解決分析

    這篇文章主要為大家介紹了MyBatisPlus查詢報錯Unknow?column?‘id‘?in?‘field?list‘解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • JSON,AJAX,Maven入門基礎

    JSON,AJAX,Maven入門基礎

    這篇文章主要介紹了JSON,AJAX和Maven基礎,如何使用AJAX讀取Json數(shù)組里面的數(shù)據(jù),感興趣的小伙伴們可以參考一下,希望能夠幫助到你
    2021-07-07
  • java中實體類和JSON對象之間相互轉化

    java中實體類和JSON對象之間相互轉化

    Java中關于Json格式轉化Object,Map,Collection類型和String類型之間的轉化在我們實際項目中應用的很是普遍和廣泛。最近工作的過程中也是經(jīng)常有,因此,自己封裝了一個類分享給大家。
    2015-05-05
  • Java建造者設計模式詳解

    Java建造者設計模式詳解

    這篇文章主要為大家詳細介紹了Java建造者設計模式,對建造者設計模式進行分析理解,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Spring多線程事務處理解決方案

    Spring多線程事務處理解決方案

    這篇文章主要介紹了Spring多線程事務處理,本文主要介紹了spring多線程事務的解決方案,心急的小伙伴可以跳過上面的理論介紹分析部分直接看最終解決方案,需要的朋友可以參考下
    2024-03-03
  • java編程實現(xiàn)屏幕截圖(截屏)代碼總結

    java編程實現(xiàn)屏幕截圖(截屏)代碼總結

    這篇文章主要介紹了java編程實現(xiàn)屏幕截圖(截屏)代碼,結合3個實例總結分析了Java截屏時頁面抓取及圖片保存的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Java中的異常處理之try-catch使用詳解

    Java中的異常處理之try-catch使用詳解

    這篇文章主要介紹了Java中的異常處理之try-catch使用的相關資料,包括異常的概念、try-catch語句的基本結構、使用示例、多個catch塊的使用、try-catch-finally的執(zhí)行順序、try-with-resources語句以及總結,需要的朋友可以參考下
    2024-12-12
  • mybatisPlus實現(xiàn)邏輯刪除,自動生成創(chuàng)建時間和更新時間方式

    mybatisPlus實現(xiàn)邏輯刪除,自動生成創(chuàng)建時間和更新時間方式

    MyBatisPlus框架中,通過@TableField(fill=FieldFill.INSERT)和@TableField(fill=FieldFill.UPDATE)注解可以實現(xiàn)在插入和更新時自動填充字段,比如創(chuàng)建時間和更新時間,使用@TableLogic注解標識邏輯刪除字段
    2024-09-09

最新評論

汉源县| 长岛县| 龙胜| 襄樊市| 庆元县| 龙井市| 廊坊市| 云安县| 新兴县| 台南市| 汝州市| 宜兰县| 罗田县| 南川市| 双城市| 武陟县| 凤翔县| 彰武县| 商丘市| 晋州市| 北宁市| 资溪县| 泸定县| 永胜县| 无锡市| 建宁县| 贺州市| 四子王旗| 邵阳市| 鹤山市| 成安县| 白河县| 启东市| 扬中市| 阿拉善右旗| 安多县| 呈贡县| 大新县| 天水市| 清原| 峨边|