日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Quartz-中断正在执行的任务

發(fā)布時(shí)間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz-中断正在执行的任务 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 概述
  • 示例
  • 示例源碼

概述

由于業(yè)務(wù)需要,停止Quartz中正在執(zhí)行的任務(wù)

  • 任務(wù)類只需要實(shí)現(xiàn)InterruptableJob類,然后實(shí)現(xiàn)interrupt()方法。

  • 在這個(gè)方法中進(jìn)行標(biāo)記的改變,在執(zhí)行中進(jìn)行這個(gè)標(biāo)記判斷,就可實(shí)現(xiàn)中斷任務(wù)了

  • 另外在調(diào)度器上調(diào)用方法:sched.interrupt(job.getKey())


  • 示例

    job類

    package com.xgj.quartz.quartzItself.interruptableJob;import java.text.SimpleDateFormat; import java.util.Date;import org.quartz.InterruptableJob; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; import org.quartz.UnableToInterruptJobException;/*** * * @ClassName: DumbInterruptableJob* * @Description: 個(gè)可執(zhí)行的中斷可執(zhí)行程序,用于單元測(cè)試。* * @author: Mr.Yang* * @date: 2017年11月15日 上午9:26:36*/public class DumbInterruptableJob implements InterruptableJob {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");private boolean _interrupted = false; // job 是否中斷private JobKey _jobKey = null; // job nameprivate static int counts = 0; // 中斷執(zhí)行次數(shù)@Overridepublic void execute(JobExecutionContext context)throws JobExecutionException {_jobKey = context.getJobDetail().getKey();System.out.println("【開(kāi)始執(zhí)行】任務(wù)Key:" + _jobKey + ",執(zhí)行時(shí)間: "+ sdf.format(new Date()));try {for (int i = 0; i < 4; i++) {try {Thread.sleep(1000L);} catch (Exception e) {e.printStackTrace();}// 查看是否中斷if (_interrupted) {counts++;System.out.println("被外界因素停止了這個(gè)任務(wù)key:" + _jobKey+ ",中斷累計(jì)次數(shù): " + counts + "\n");return; // 也可以選擇拋出一個(gè)JobExecutionException,根據(jù)業(yè)務(wù)需要指定行為}}} finally {System.out.println("【完成任務(wù)】key:" + _jobKey + " 完成時(shí)間:"+ sdf.format(new Date()));}}@Overridepublic void interrupt() throws UnableToInterruptJobException {System.out.println("\n—————— 【中斷】外界正在調(diào)用調(diào)度器停止這個(gè)任務(wù)key:" + _jobKey+ " ————————");_interrupted = true;}}

    調(diào)度類

    package com.xgj.quartz.quartzItself.interruptableJob;import static org.quartz.DateBuilder.nextGivenSecondDate; import static org.quartz.JobBuilder.newJob; import static org.quartz.SimpleScheduleBuilder.simpleSchedule; import static org.quartz.TriggerBuilder.newTrigger;import java.text.SimpleDateFormat; import java.util.Date;import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.SchedulerMetaData; import org.quartz.SimpleTrigger; import org.quartz.impl.StdSchedulerFactory;/*** * * @ClassName: InterruptExample* * @Description: 調(diào)度類* * @author: Mr.Yang* * @date: 2017年11月15日 上午9:28:21*/public class InterruptExample {public void run() throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("------- 初始化 ----------------------");SchedulerFactory sf = new StdSchedulerFactory();Scheduler sched = sf.getScheduler();// 下一個(gè)15秒Date startTime = nextGivenSecondDate(null, 15);// 當(dāng)前時(shí)間15秒后,每間隔5秒執(zhí)行一次任務(wù)JobDetail job = newJob(DumbInterruptableJob.class).withIdentity("interruptableJob1", "group1").build();SimpleTrigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(startTime).withSchedule(simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();Date ft = sched.scheduleJob(job, trigger);System.out.println(job.getKey() + " 將運(yùn)行于:" + sdf.format(ft) + " 并重復(fù):"+ trigger.getRepeatCount() + " 次,間隔 "+ trigger.getRepeatInterval() / 1000 + " 秒");// 調(diào)度開(kāi)始執(zhí)行sched.start();System.out.println("------- 開(kāi)始調(diào)度 (調(diào)用.start()方法) ----------------");System.out.println("------- 每7秒鐘啟動(dòng)一次中斷任務(wù)(10次中斷) ----------");for (int i = 0; i < 10; i++) {try {Thread.sleep(7000L);// 手動(dòng)中斷調(diào)度器中的jobsched.interrupt(job.getKey());} catch (Exception e) {e.printStackTrace();}}System.out.println("------- 關(guān)閉調(diào)度 ---------------------");sched.shutdown(true);System.out.println("------- 關(guān)閉調(diào)度器完成 -----------------");SchedulerMetaData metaData = sched.getMetaData();System.out.println("~~~~~~~~~~ 執(zhí)行了 "+ metaData.getNumberOfJobsExecuted() + " 個(gè) jobs.");}public static void main(String[] args) throws Exception {InterruptExample example = new InterruptExample();example.run();} }

    運(yùn)行結(jié)果

    ------- 初始化 ---------------------- INFO StdSchedulerFactory - Using default implementation for ThreadExecutor INFO SimpleThreadPool - Job execution threads will use class loader of thread: main INFO SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl INFO QuartzScheduler - Quartz Scheduler v.2.2.3 created. INFO RAMJobStore - RAMJobStore initialized. INFO QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.3) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.NOT STARTED.Currently in standby mode.Number of jobs executed: 0Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.INFO StdSchedulerFactory - Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' INFO StdSchedulerFactory - Quartz scheduler version: 2.2.3 group1.interruptableJob1 將運(yùn)行于:2017-11-15 09:29:45 并重復(fù):-1 次,間隔 5 秒 INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. ------- 開(kāi)始調(diào)度 (調(diào)用.start()方法) ---------------- -------7秒鐘啟動(dòng)一次中斷任務(wù)(10次中斷) ---------- 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:29:45—————— 【中斷】外界正在調(diào)用調(diào)度器停止這個(gè)任務(wù)key:group1.interruptableJob1 ———————— 被外界因素停止了這個(gè)任務(wù)key:group1.interruptableJob1,中斷累計(jì)次數(shù): 1【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:29:49 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:29:50 【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:29:54 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:29:55—————— 【中斷】外界正在調(diào)用調(diào)度器停止這個(gè)任務(wù)key:group1.interruptableJob1 ———————— 被外界因素停止了這個(gè)任務(wù)key:group1.interruptableJob1,中斷累計(jì)次數(shù): 2【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:29:56 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:00—————— 【中斷】外界正在調(diào)用調(diào)度器停止這個(gè)任務(wù)key:group1.interruptableJob1 ———————— 被外界因素停止了這個(gè)任務(wù)key:group1.interruptableJob1,中斷累計(jì)次數(shù): 3【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:03 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:05 【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:09 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:10 【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:14 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:15—————— 【中斷】外界正在調(diào)用調(diào)度器停止這個(gè)任務(wù)key:group1.interruptableJob1 ———————— 被外界因素停止了這個(gè)任務(wù)key:group1.interruptableJob1,中斷累計(jì)次數(shù): 4【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:17 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:20—————— 【中斷】外界正在調(diào)用調(diào)度器停止這個(gè)任務(wù)key:group1.interruptableJob1 ———————— 被外界因素停止了這個(gè)任務(wù)key:group1.interruptableJob1,中斷累計(jì)次數(shù): 5【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:24 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:25 【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:29 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:30—————— 【中斷】外界正在調(diào)用調(diào)度器停止這個(gè)任務(wù)key:group1.interruptableJob1 ———————— 被外界因素停止了這個(gè)任務(wù)key:group1.interruptableJob1,中斷累計(jì)次數(shù): 6【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:31 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:35—————— 【中斷】外界正在調(diào)用調(diào)度器停止這個(gè)任務(wù)key:group1.interruptableJob1 ———————— 被外界因素停止了這個(gè)任務(wù)key:group1.interruptableJob1,中斷累計(jì)次數(shù): 7【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:38 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:40 【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:44 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:45 【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:49 【開(kāi)始執(zhí)行】任務(wù)Key:group1.interruptableJob1,執(zhí)行時(shí)間: 2017-11-15 09:30:50—————— 【中斷】外界正在調(diào)用調(diào)度器停止這個(gè)任務(wù)key:group1.interruptableJob1 ———————— ------- 關(guān)閉調(diào)度 --------------------- INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down. INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused. 被外界因素停止了這個(gè)任務(wù)key:group1.interruptableJob1,中斷累計(jì)次數(shù): 8【完成任務(wù)】key:group1.interruptableJob1 完成時(shí)間:2017-11-15 09:30:52 INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete. ------- 關(guān)閉調(diào)度器完成 ----------------- ~~~~~~~~~~ 執(zhí)行了 14 個(gè) jobs.

    示例源碼

    代碼已托管到Github—> https://github.com/yangshangwei/SpringMaster

    總結(jié)

    以上是生活随笔為你收集整理的Quartz-中断正在执行的任务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。