欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何對quartz定時任務設置結束時間

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

quartz定時任務設置結束時間

在使用quartz時,使用cornTrigger再設置一個結束時間 endAt(“結束的時間”),實現在任務執(zhí)后自動銷毀任務,在到了結束時間之后,job并不會留在內存中,job是直接被delete掉,所以不擔心會有內存滿的情況;

代碼:

//按新的cronExpression表達式構建一個新的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
 * 定時任務工具類
 */
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";

    /**
     * 添加一個定時任務,使用默認的任務組名,觸發(fā)器名,觸發(fā)器組名
     *
     * @param jobName  任務名
     * @param jobClass 任務類名
     * @param time     時間設置,參考quartz說明文檔
     * @param data     定時任務所帶參數數據
     * @param endDate  定時任務生命周期結束時間
     * @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);
    }

    /**
     * 添加一個定時任務,使用默認的任務組名,觸發(fā)器名,觸發(fā)器組名
     *
     * @param jobName  任務名
     * @param jobClass 任務類名
     * @param time     時間設置,參考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);
    }

    /** */
    /**
     * 添加一個定時任務,使用默認的任務組名,觸發(fā)器名,觸發(fā)器組名
     *
     * @param jobName  任務名
     * @param jobClass 任務類名
     * @param time     時間間隔  每隔多少時間執(zhí)行一次 單位毫秒 如 1000*60*60 = 1小時
     * @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);
    }

    /** */
    /**
     * 添加一個定時任務
     *
     * @param jobName          任務名
     * @param jobGroupName     任務組名
     * @param triggerName      觸發(fā)器名
     * @param triggerGroupName 觸發(fā)器組名
     * @param jobClass         任務類名
     * @param time             時間間隔  每隔多少時間執(zhí)行一次 單位秒 如 1000*60*60 = 1小時
     * @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)建一個
        if (null == trigger) {
            JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();
            //按新的cronExpression表達式構建一個新的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);
            //啟動
            if (!scheduler.isShutdown())
                scheduler.start();
        } else {
            // Trigger已存在,那么更新相應的定時設置
            //按新的cronExpression表達式重新構建trigger
            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(time).repeatForever()).build();
            //按新的trigger重新設置job執(zhí)行
            scheduler.rescheduleJob(triggerKey, trigger);
        }
    }

    /**
     * 添加一個定時任務
     *
     * @param jobName          任務名
     * @param jobGroupName     任務組名
     * @param triggerName      觸發(fā)器名
     * @param triggerGroupName 觸發(fā)器組名
     * @param jobClass         任務類名
     * @param time             時間設置,參考quartz說明文檔
     * @param data             對應定時認為中所涉及的數據
     * @param endDate          定時任務周期結束時間
     * @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)建一個
        if (null == trigger) {
            JobDetail jobDetail =
                    JobBuilder.newJob(jobClass)
                            .withIdentity(jobName, jobGroupName)
                            .setJobData(data)
                            .build();
            //表達式調度構建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            //按新的cronExpression表達式構建一個新的trigger
            trigger = TriggerBuilder.newTrigger()
                    .withIdentity(triggerName, triggerGroupName)
                    .withSchedule(scheduleBuilder)
                    .endAt(endDate)
                    .build();
            scheduler.scheduleJob(jobDetail, trigger);
            //啟動
            if (!scheduler.isShutdown())
                scheduler.start();
        } else {
            // Trigger已存在,那么更新相應的定時設置
            //表達式調度構建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            //按新的cronExpression表達式重新構建trigger
            trigger = trigger.getTriggerBuilder()
                    .withIdentity(triggerKey)
                    .withSchedule(scheduleBuilder)
                    .startAt(new Date())
                    .endAt(endDate).build();
            //按新的trigger重新設置job執(zhí)行
            scheduler.rescheduleJob(triggerKey, trigger);
        }
    }

    /**
     * 添加一個定時任務
     *
     * @param jobName          任務名
     * @param jobGroupName     任務組名
     * @param triggerName      觸發(fā)器名
     * @param triggerGroupName 觸發(fā)器組名
     * @param jobClass         任務類名
     * @param time             時間設置,參考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)建一個
        if (null == trigger) {
            JobDetail jobDetail =
                    JobBuilder.newJob(jobClass)
                            .withIdentity(jobName, jobGroupName)
                            .build();
            //表達式調度構建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            //按新的cronExpression表達式構建一個新的trigger
            trigger = TriggerBuilder.newTrigger()
                    .withIdentity(triggerName, triggerGroupName)
                    .withSchedule(scheduleBuilder)
                    .build();
            scheduler.scheduleJob(jobDetail, trigger);
            //啟動
            if (!scheduler.isShutdown())
                scheduler.start();
        } else {
            // Trigger已存在,那么更新相應的定時設置
            //表達式調度構建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            //按新的cronExpression表達式重新構建trigger
            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
                    .withSchedule(scheduleBuilder).build();
            //按新的trigger重新設置job執(zhí)行
            scheduler.rescheduleJob(triggerKey, trigger);
        }
    }

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

    /** */
    /**
     * 移除一個任務
     *
     * @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));// 刪除任務
    }

    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();
        }
    }
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java?如何通過注解實現接口輸出時數據脫敏

    Java?如何通過注解實現接口輸出時數據脫敏

    這篇文章主要介紹了Java?如何通過注解實現接口輸出時數據脫敏,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot如何使用自定義注解實現接口限流

    SpringBoot如何使用自定義注解實現接口限流

    這篇文章主要介紹了SpringBoot如何使用自定義注解實現接口限流,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java數據結構之鏈表(動力節(jié)點之Java學院整理)

    Java數據結構之鏈表(動力節(jié)點之Java學院整理)

    這篇文章主要介紹了Java數據結構之鏈表(動力節(jié)點之Java學院整理)的相關資料,需要的朋友可以參考下
    2017-04-04
  • 用攔截器修改返回response,對特定的返回進行修改操作

    用攔截器修改返回response,對特定的返回進行修改操作

    這篇文章主要介紹了用攔截器修改返回response,對特定的返回進行修改操作。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 使用Jenkins Pipeline自動化構建發(fā)布Java項目的方法

    使用Jenkins Pipeline自動化構建發(fā)布Java項目的方法

    這篇文章主要介紹了使用Jenkins Pipeline自動化構建發(fā)布Java項目的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 三張圖徹底了解Java中字符串的不變性

    三張圖徹底了解Java中字符串的不變性

    這篇文章主要通過三張圖徹底幫助大家了解Java中字符串的不變性,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • JDK生成WebService客戶端代碼以及調用方式

    JDK生成WebService客戶端代碼以及調用方式

    WebService 是一種跨編程語言和跨操作系統(tǒng)平臺的遠程調用技術,下面這篇文章主要給大家介紹了關于JDK生成WebService客戶端代碼以及調用方式的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • Java中類的初始化和實例化區(qū)別詳解

    Java中類的初始化和實例化區(qū)別詳解

    這篇文章主要介紹了Java中類的初始化和實例化區(qū)別詳解,類的初始化<BR>是完成程序執(zhí)行前的準備工作,類的實例化(實例化對象)是指創(chuàng)建一個對象的過程,需要的朋友可以參考下
    2023-08-08
  • idea 實現git rebase操作應用場景

    idea 實現git rebase操作應用場景

    本文結合idea工具進行rebase的各種場景的操作,借助工具更能直觀地觀察到分支之間地操作差異,方便我們理解rebase的各種操作以及場景的使用,對idea  git rebase操作知識感興趣的朋友一起看看吧
    2024-01-01
  • 關于MyBatis結果映射的實例總結

    關于MyBatis結果映射的實例總結

    結果集映射主要是為了解決屬性名和類型名不一致的問題,下面這篇文章主要給大家介紹了關于MyBatis結果映射的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05

最新評論