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

如何對(duì)quartz定時(shí)任務(wù)設(shè)置結(jié)束時(shí)間

 更新時(shí)間:2023年12月14日 09:12:08   作者:不喜歡吃貓的魚  
這篇文章主要介紹了如何對(duì)quartz定時(shí)任務(wù)設(shè)置結(jié)束時(shí)間問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

quartz定時(shí)任務(wù)設(shè)置結(jié)束時(shí)間

在使用quartz時(shí),使用cornTrigger再設(shè)置一個(gè)結(jié)束時(shí)間 endAt(“結(jié)束的時(shí)間”),實(shí)現(xiàn)在任務(wù)執(zhí)后自動(dòng)銷毀任務(wù),在到了結(jié)束時(shí)間之后,job并不會(huì)留在內(nèi)存中,job是直接被delete掉,所以不擔(dān)心會(huì)有內(nèi)存滿的情況;

代碼:

//按新的cronExpression表達(dá)式構(gòu)建一個(gè)新的trigger
trigger = TriggerBuilder.newTrigger()
        .withIdentity(triggerName, triggerGroupName)
        .withSchedule(scheduleBuilder)
        .endAt(endDate)
        .build();

附屬上查詢所有job代碼:

/**
 * 查詢所有的job
 */
public static void getAllJobs(){
    try {
        Scheduler scheduler = sf.getScheduler();
        for (String groupName : scheduler.getJobGroupNames()) {
            for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
                String jobName = jobKey.getName();
                String jobGroup = jobKey.getGroup();
                //get job's trigger
                List<Trigger> triggers = (List<Trigger>) scheduler.getTriggersOfJob(jobKey);
                Date nextFireTime = triggers.get(0).getNextFireTime();
                System.out.println("[jobName] : " + jobName + " [groupName] : "
                        + jobGroup + " - " + nextFireTime);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

下面是完整的quartz工具類

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;
import qgs.framework.core.task.JobFactory;
import qgs.framework.util.utilty.DateUtil;

import java.text.ParseException;
import java.util.Date;
import java.util.List;

/**
 * create by XXX on 2018/09/03
 * 定時(shí)任務(wù)工具類
 */
public class QuartzUtil {
    private static SchedulerFactory sf = new StdSchedulerFactory();
    private static JobFactory jobFactory = new JobFactory();
    private static String JOB_GROUP_NAME = "group1";
    private static String TRIGGER_GROUP_NAME = "trigger1";

    /**
     * 添加一個(gè)定時(shí)任務(wù),使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名
     *
     * @param jobName  任務(wù)名
     * @param jobClass 任務(wù)類名
     * @param time     時(shí)間設(shè)置,參考quartz說明文檔
     * @param data     定時(shí)任務(wù)所帶參數(shù)數(shù)據(jù)
     * @param endDate  定時(shí)任務(wù)生命周期結(jié)束時(shí)間
     * @throws ParseException
     */
    public static void saveJobCron(String jobName, Class<? extends Job> jobClass, String time, JobDataMap data, Date endDate) throws Exception {
        saveJobCron(jobName, JOB_GROUP_NAME, jobName, TRIGGER_GROUP_NAME, jobClass, time, data, endDate);
    }

    /**
     * 添加一個(gè)定時(shí)任務(wù),使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名
     *
     * @param jobName  任務(wù)名
     * @param jobClass 任務(wù)類名
     * @param time     時(shí)間設(shè)置,參考quartz說明文檔
     * @throws ParseException
     */
    public static void saveJobCron(String jobName, Class<? extends Job> jobClass, String time) throws Exception {
        saveJobCron(jobName, JOB_GROUP_NAME, jobName, TRIGGER_GROUP_NAME, jobClass, time);
    }

    /** */
    /**
     * 添加一個(gè)定時(shí)任務(wù),使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名
     *
     * @param jobName  任務(wù)名
     * @param jobClass 任務(wù)類名
     * @param time     時(shí)間間隔  每隔多少時(shí)間執(zhí)行一次 單位毫秒 如 1000*60*60 = 1小時(shí)
     * @throws ParseException
     */
    public static void saveJobSimple(String jobName, Class<? extends Job> jobClass, Integer time) throws Exception {
        saveJobSimple(jobName, JOB_GROUP_NAME, jobName, TRIGGER_GROUP_NAME, jobClass, time, true);
    }

    public static void saveJobSimple(String jobName, Class<? extends Job> jobClass, Integer time, boolean firstRun) throws Exception {
        saveJobSimple(jobName, JOB_GROUP_NAME, jobName, TRIGGER_GROUP_NAME, jobClass, time, firstRun);
    }

    /** */
    /**
     * 添加一個(gè)定時(shí)任務(wù)
     *
     * @param jobName          任務(wù)名
     * @param jobGroupName     任務(wù)組名
     * @param triggerName      觸發(fā)器名
     * @param triggerGroupName 觸發(fā)器組名
     * @param jobClass         任務(wù)類名
     * @param time             時(shí)間間隔  每隔多少時(shí)間執(zhí)行一次 單位秒 如 1000*60*60 = 1小時(shí)
     * @throws SchedulerException
     * @throws ParseException
     * @throws ParseException
     */
    public static void saveJobSimple(String jobName, String jobGroupName, String triggerName,
                                     String triggerGroupName, Class<? extends Job> jobClass, Integer time, boolean firstRun)
            throws Exception {
        Scheduler scheduler = sf.getScheduler();
        scheduler.setJobFactory(jobFactory);

        TriggerKey triggerKey = TriggerKey.triggerKey(jobName, triggerGroupName);
        SimpleTrigger trigger = (SimpleTrigger) scheduler.getTrigger(triggerKey);
        //不存在,創(chuàng)建一個(gè)
        if (null == trigger) {
            JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();
            //按新的cronExpression表達(dá)式構(gòu)建一個(gè)新的trigger
            TriggerBuilder s = TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroupName);
            if (!firstRun) {
                s.startAt(DateUtil.addSecond(new Date(), time));
            }
            trigger = (SimpleTrigger) s.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(time).repeatForever()).build();
            scheduler.scheduleJob(jobDetail, trigger);
            //啟動(dòng)
            if (!scheduler.isShutdown())
                scheduler.start();
        } else {
            // Trigger已存在,那么更新相應(yīng)的定時(shí)設(shè)置
            //按新的cronExpression表達(dá)式重新構(gòu)建trigger
            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(time).repeatForever()).build();
            //按新的trigger重新設(shè)置job執(zhí)行
            scheduler.rescheduleJob(triggerKey, trigger);
        }
    }

    /**
     * 添加一個(gè)定時(shí)任務(wù)
     *
     * @param jobName          任務(wù)名
     * @param jobGroupName     任務(wù)組名
     * @param triggerName      觸發(fā)器名
     * @param triggerGroupName 觸發(fā)器組名
     * @param jobClass         任務(wù)類名
     * @param time             時(shí)間設(shè)置,參考quartz說明文檔
     * @param data             對(duì)應(yīng)定時(shí)認(rèn)為中所涉及的數(shù)據(jù)
     * @param endDate          定時(shí)任務(wù)周期結(jié)束時(shí)間
     * @throws SchedulerException
     * @throws ParseException
     * @throws ParseException
     */
    public static void saveJobCron(String jobName, String jobGroupName, String triggerName,
                                   String triggerGroupName, Class<? extends Job> jobClass, String time,
                                   JobDataMap data, Date endDate)
            throws Exception {
        Scheduler scheduler = sf.getScheduler();
        scheduler.setJobFactory(jobFactory);

        TriggerKey triggerKey = TriggerKey.triggerKey(jobName, triggerGroupName);
        CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
        //不存在,創(chuàng)建一個(gè)
        if (null == trigger) {
            JobDetail jobDetail =
                    JobBuilder.newJob(jobClass)
                            .withIdentity(jobName, jobGroupName)
                            .setJobData(data)
                            .build();
            //表達(dá)式調(diào)度構(gòu)建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            //按新的cronExpression表達(dá)式構(gòu)建一個(gè)新的trigger
            trigger = TriggerBuilder.newTrigger()
                    .withIdentity(triggerName, triggerGroupName)
                    .withSchedule(scheduleBuilder)
                    .endAt(endDate)
                    .build();
            scheduler.scheduleJob(jobDetail, trigger);
            //啟動(dòng)
            if (!scheduler.isShutdown())
                scheduler.start();
        } else {
            // Trigger已存在,那么更新相應(yīng)的定時(shí)設(shè)置
            //表達(dá)式調(diào)度構(gòu)建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            //按新的cronExpression表達(dá)式重新構(gòu)建trigger
            trigger = trigger.getTriggerBuilder()
                    .withIdentity(triggerKey)
                    .withSchedule(scheduleBuilder)
                    .startAt(new Date())
                    .endAt(endDate).build();
            //按新的trigger重新設(shè)置job執(zhí)行
            scheduler.rescheduleJob(triggerKey, trigger);
        }
    }

    /**
     * 添加一個(gè)定時(shí)任務(wù)
     *
     * @param jobName          任務(wù)名
     * @param jobGroupName     任務(wù)組名
     * @param triggerName      觸發(fā)器名
     * @param triggerGroupName 觸發(fā)器組名
     * @param jobClass         任務(wù)類名
     * @param time             時(shí)間設(shè)置,參考quartz說明文檔
     * @throws SchedulerException
     * @throws ParseException
     * @throws ParseException
     */
    public static void saveJobCron(String jobName, String jobGroupName, String triggerName,
                                   String triggerGroupName, Class<? extends Job> jobClass, String time) throws Exception {
        Scheduler scheduler = sf.getScheduler();
        scheduler.setJobFactory(jobFactory);

        TriggerKey triggerKey = TriggerKey.triggerKey(jobName, triggerGroupName);
        CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
        //不存在,創(chuàng)建一個(gè)
        if (null == trigger) {
            JobDetail jobDetail =
                    JobBuilder.newJob(jobClass)
                            .withIdentity(jobName, jobGroupName)
                            .build();
            //表達(dá)式調(diào)度構(gòu)建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            //按新的cronExpression表達(dá)式構(gòu)建一個(gè)新的trigger
            trigger = TriggerBuilder.newTrigger()
                    .withIdentity(triggerName, triggerGroupName)
                    .withSchedule(scheduleBuilder)
                    .build();
            scheduler.scheduleJob(jobDetail, trigger);
            //啟動(dòng)
            if (!scheduler.isShutdown())
                scheduler.start();
        } else {
            // Trigger已存在,那么更新相應(yīng)的定時(shí)設(shè)置
            //表達(dá)式調(diào)度構(gòu)建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            //按新的cronExpression表達(dá)式重新構(gòu)建trigger
            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
                    .withSchedule(scheduleBuilder).build();
            //按新的trigger重新設(shè)置job執(zhí)行
            scheduler.rescheduleJob(triggerKey, trigger);
        }
    }

    /** */
    /**
     * 移除一個(gè)任務(wù)(使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名)
     *
     * @param jobName
     * @throws SchedulerException
     */
    public static void removeJob(String jobName) throws Exception {
        removeJob(jobName, JOB_GROUP_NAME, jobName, TRIGGER_GROUP_NAME);
    }

    /** */
    /**
     * 移除一個(gè)任務(wù)
     *
     * @param jobName
     * @param jobGroupName
     * @param triggerName
     * @param triggerGroupName
     * @throws SchedulerException
     */
    public static void removeJob(String jobName, String jobGroupName, String triggerName,
                                 String triggerGroupName) throws Exception {
        Scheduler scheduler = sf.getScheduler();
        TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
        scheduler.pauseTrigger(triggerKey);// 停止觸發(fā)器
        scheduler.unscheduleJob(triggerKey);// 移除觸發(fā)器
        scheduler.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 刪除任務(wù)
    }

    public static void shutdownJobs() throws Exception {
        Scheduler scheduler = sf.getScheduler();
        try {
            if (!scheduler.isShutdown()) {
                scheduler.shutdown();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 查詢所有的job
     */
    public static void getAllJobs(){
        try {
            Scheduler scheduler = sf.getScheduler();
            for (String groupName : scheduler.getJobGroupNames()) {
                for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
                    String jobName = jobKey.getName();
                    String jobGroup = jobKey.getGroup();
                    //get job's trigger
                    List<Trigger> triggers = (List<Trigger>) scheduler.getTriggersOfJob(jobKey);
                    Date nextFireTime = triggers.get(0).getNextFireTime();
                    System.out.println("[jobName] : " + jobName + " [groupName] : "
                            + jobGroup + " - " + nextFireTime);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于SpringBoot簡介、官網(wǎng)構(gòu)建、快速啟動(dòng)的問題

    關(guān)于SpringBoot簡介、官網(wǎng)構(gòu)建、快速啟動(dòng)的問題

    SpringBoot 是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化Spring應(yīng)用的初始搭建以及開發(fā)過程,這篇文章主要介紹了SpringBoot簡介、官網(wǎng)構(gòu)建、快速啟動(dòng),需要的朋友可以參考下
    2022-07-07
  • SpringBoot數(shù)據(jù)脫敏的實(shí)現(xiàn)示例

    SpringBoot數(shù)據(jù)脫敏的實(shí)現(xiàn)示例

    數(shù)據(jù)脫敏主要應(yīng)用在客戶安全數(shù)據(jù)或商業(yè)性敏感數(shù)據(jù)的情況,本文主要介紹了SpringBoot數(shù)據(jù)脫敏的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • spring mvc中的@ModelAttribute注解示例介紹

    spring mvc中的@ModelAttribute注解示例介紹

    在Spring mvc中,注解@ModelAttribute是一個(gè)非常常用的注解,下面這篇文章主要給大家介紹了關(guān)于spring mvc中@ModelAttribute注解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-09-09
  • Java常用流程控制語句實(shí)現(xiàn)原理解析

    Java常用流程控制語句實(shí)現(xiàn)原理解析

    這篇文章主要介紹了Java常用流程控制語句實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Docker容器中的SSH免密登錄詳解

    Docker容器中的SSH免密登錄詳解

    這篇文章主要介紹了Docker容器中的SSH免密登錄詳解,在日常的開發(fā)和測試環(huán)境中經(jīng)常需要?jiǎng)?chuàng)建和管理Docker容器,有時(shí),出于調(diào)試或管理的目的,可能需要SSH到容器內(nèi)部,本文將介紹如何創(chuàng)建一個(gè)Docker容器,它在啟動(dòng)時(shí)自動(dòng)運(yùn)行SSH服務(wù),并支持免密登錄,需要的朋友可以參考下
    2023-08-08
  • JVM中的GC初識(shí)

    JVM中的GC初識(shí)

    GC(Garbage Collection)稱之為垃圾回收,是對(duì)內(nèi)存中的垃圾對(duì)象,采用一定的算法進(jìn)行內(nèi)存回收的一個(gè)動(dòng)作,這篇文章主要介紹了JVM中的GC初識(shí),需要的朋友可以參考下
    2022-05-05
  • 解決idea中svn提交時(shí)performing vcs refresh時(shí)間很長的問題

    解決idea中svn提交時(shí)performing vcs refresh時(shí)間很長的問題

    這篇文章主要介紹了解決idea中svn提交時(shí)performing vcs refresh時(shí)間很長的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java多線程常見案例分析線程池與單例模式及阻塞隊(duì)列

    Java多線程常見案例分析線程池與單例模式及阻塞隊(duì)列

    這篇文章主要介紹了多線程的常見案例,線程池(重點(diǎn))、單例模式、阻塞隊(duì)列,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 聊聊Spring循環(huán)依賴三級(jí)緩存是否可以減少為二級(jí)緩存的情況

    聊聊Spring循環(huán)依賴三級(jí)緩存是否可以減少為二級(jí)緩存的情況

    這篇文章主要介紹了聊聊Spring循環(huán)依賴三級(jí)緩存是否可以減少為二級(jí)緩存的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java實(shí)現(xiàn)潛艇大戰(zhàn)游戲源碼

    java實(shí)現(xiàn)潛艇大戰(zhàn)游戲源碼

    潛艇大戰(zhàn)游戲相信大家都玩過,是一款非常有趣的小游戲,那么基于代碼是如何實(shí)現(xiàn)的呢?今天小編給大家?guī)硪黄坛處椭蠹覍W(xué)習(xí)java實(shí)現(xiàn)潛艇大戰(zhàn)游戲,感謝的朋友一起看看吧
    2021-06-06

最新評(píng)論

泽库县| 东阿县| 济南市| 浦县| 正蓝旗| 左云县| 双城市| 鄂伦春自治旗| 福海县| 南郑县| 岳普湖县| 井研县| 湘潭县| 开原市| 乐都县| 寿宁县| 开封县| 马龙县| 柳林县| 苏尼特左旗| 松原市| 盘锦市| 巴南区| 谢通门县| 清远市| 涡阳县| 汉沽区| 桂东县| 江源县| 浦县| 灌云县| 富川| 博湖县| 临朐县| 玉溪市| 九江市| 锡林浩特市| 灵璧县| 东明县| 嘉善县| 武宣县|