国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot開啟動(dòng)態(tài)定時(shí)任務(wù)并手動(dòng)、自動(dòng)關(guān)閉

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot開啟動(dòng)態(tài)定時(shí)任務(wù)并手動(dòng)、自動(dòng)關(guān)閉。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

場(chǎng)景需求:在執(zhí)行某個(gè)方法的兩小時(shí)之后進(jìn)行某個(gè)操作

涉及:定時(shí)任務(wù)、哈希表

需要注意:

  1. 業(yè)務(wù)邏輯層是單一實(shí)例的,所以在定時(shí)任務(wù)類內(nèi)操作業(yè)務(wù)邏輯層的某個(gè)屬性和在業(yè)務(wù)邏輯層內(nèi)操作的都是同一個(gè)。
  2. 使用Map存放數(shù)據(jù)不要用IdentityHashMap,因?yàn)镮dentityHashMap比較key值用的是“==”,也就是直接比較地址,所以用taskId作為key值取不出來。

疑問:ThreadPoolTaskScheduler線程池需不需要規(guī)定線程數(shù)量?文章來源地址http://www.zghlxwxcb.cn/news/detail-821402.html

定時(shí)任務(wù)類

@Component
public class VideoRecorderScheduler {
    private final TestService testService = SpringContextHolder.getBean(TestService.class);
	
    public VideoRecorderScheduler(TaskScheduler taskScheduler) {
        this.taskScheduler = taskScheduler;
    }

    // 開啟定時(shí)任務(wù)
    public ScheduledFuture startVideoRecording(){
        //System.out.println("開始啦--------------------");
        // 記錄開啟時(shí)間
        startTime = System.currentTimeMillis();
        //開啟任務(wù) 兩小時(shí)后自動(dòng)執(zhí)行停止任務(wù) 可以改成兩分鐘方便測(cè)試
        stopTask = taskScheduler.schedule(this::stopVideoRecording, Instant.now().plusSeconds(2 * 60 * 60));
        return stopTask;
    }

    // 停止定時(shí)任務(wù)
    private void stopVideoRecording(){
        // 執(zhí)行其他操作
        // ...
		
        // 關(guān)閉定時(shí)任務(wù)
        if (stopTask != null && !stopTask.isCancelled()) {
            stopTask.cancel(true);
            testService.getScheduledTasks().remove(taskId);
        }
    }
}

測(cè)試類 testService

@Service
public class TestService(){
    // 存放定時(shí)任務(wù)的map
    @Getter
    private ConcurrentHashMap<String,ScheduledFuture<?>> scheduledTasks = new ConcurrentHashMap<>();
    // 用IdentityHashMap取不出來數(shù)據(jù),取出的是null
    // 因?yàn)镮dentityHashMap,比較key值,直接使用的是==,也就是比較地址
    // private Map<String, ScheduledFuture<?>> scheduledTasks = new IdentityHashMap<>();
	
    public void start(){
	//開啟定時(shí)任務(wù)
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); // 創(chuàng)建一個(gè)ThreadPoolTaskScheduler對(duì)象
        taskScheduler.initialize(); // 初始化taskScheduler
        VideoRecorderScheduler videoRecorder = new VideoRecorderScheduler(taskScheduler); // 創(chuàng)建一個(gè)帶參數(shù)的VideoRecorder對(duì)象
        //放入map
        ScheduledFuture stopTask = videoRecorder.startVideoRecording();
        scheduledTasks.put(taskId,stopTask);
    }
	
	public void stop(){
	    //取消定時(shí)任務(wù)
            ScheduledFuture<?> stopTask = scheduledTasks.get(taskId);
            scheduledTasks.remove(taskId);
            if (stopTask != null && !stopTask.isCancelled()) {
                stopTask.cancel(true);
            }
	}
}

到了這里,關(guān)于SpringBoot開啟動(dòng)態(tài)定時(shí)任務(wù)并手動(dòng)、自動(dòng)關(guān)閉的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包