激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring動態添加定時任務的實現思路

Spring動態添加定時任務的實現思路

2021-10-03 15:16huan_1993 Java教程

這篇文章主要介紹了Spring動態添加定時任務的實現思路,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、背景

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

二、需求和實現思路

1、能夠動態的添加一個定時任務。

spring中存在一個類threadpooltaskscheduler,它可以實現根據一個cron表達式來調度一個任務,并返回一個scheduledfuture對象。

Spring動態添加定時任務的實現思路

2、能夠取消定時任務的執行。

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

3、動態的修改任務執行的時間。

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

4、獲取定時任務執行的異常

threadpooltaskscheduler類中有一個設置errorhandler的方法,給自己實現的errorhandler即可。

Spring動態添加定時任務的實現思路

提示:

  1. spring中我們通過@scheduled注解來實現的定時任務,底層也是通過threadpooltaskscheduler來實現的。可以通過scheduledannotationbeanpostprocessor類來查看。
  2. threadpooltaskscheduler的默認線程數是1,這個需要根據實際的情況進行修改。

三、代碼實現

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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 {
        // 動態啟動一個定時任務
        log.info("注冊一個定時任務:每隔1秒執行一次");
        scheduledfuture = register("* * * * * ?");
 
        // 取消一個調度
        new thread(() -> {
            try {
                timeunit.seconds.sleep(5);
                log.info("取消調度");
                scheduledfuture.cancel(false);
                log.info("取消結果:" + scheduledfuture.iscancelled());
                log.info("重新注冊一個定時任務:每隔2秒執行一次");
                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("定時任務下次執行的時間為:[{}]", nextexectime.format(datetimeformatter.ofpattern("yyyy-mm-dd hh:mm:ss")));
        }
 
        return taskscheduler.schedule(new runnable() {
            @override
            public void run() {
                log.info("我執行了");
            }
        }, new crontrigger(cron));
    }
}

四、執行結果

Spring動態添加定時任務的實現思路

五、完整代碼

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

到此這篇關于spring動態添加定時任務的實現思路的文章就介紹到這了,更多相關spring定時任務內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/fu_huo_1993/article/details/118583494

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 久久国产精品久久久久久久久久 | 久久精品国产99国产精品亚洲 | 一区二区美女视频 | 免费国产一区二区视频 | 新久草在线视频 | 国产超碰人人做人人爱ⅴa 色天天综合网 | 久久国产在线观看 | qyl在线视频精品免费观看 | 成人精品久久久 | 多男操一女视频 | 粉嫩蜜桃麻豆免费大片 | 免费a级网站 | 中文在线观看www | 国产一区亚洲 | 国产精品久久久久久久久久东京 | 看免费黄色大片 | 欧美大胆xxxx肉体摄影 | 久久精品欧美视频 | 日韩黄色一级视频 | 免费黄色在线观看网站 | 久久蜜臀一区二区三区av | 黄色7777 | 日本xxxx视频 | 国产精品视频一区二区三区四 | 国产99精品在线 | 欧美视频一区二区三区四区 | 91福利在线观看 | 国产电影精品久久 | 国产精选电影免费在线观看 | 亚洲激情91 | 国内一区| 一区二区三区欧美日韩 | 三级18视频 | chengrenzaixian| 久久免费视频3 | 成人羞羞视频在线观看免费 | 中午字幕无线码一区2020 | 国产一国产精品一级毛片 | 九九热在线免费观看视频 | 亚洲一区二区三区在线免费观看 | 海角在线观看91一区二区 |