【Quartz】常用方法的使用方式(三)

简介: 原文:【Quartz】常用方法的使用方式(三)前言    总结了一下quartz组件的一些常用方法,以备将来不时之需。哈哈,看着挺简单有些好是值得笔记一下的。好记性不如烂笔头吗? 代码部分:  方法类内容: public class ExamplesGo { ...
原文: 【Quartz】常用方法的使用方式(三)

前言

   总结了一下quartz组件的一些常用方法,以备将来不时之需。哈哈,看着挺简单有些好是值得笔记一下的。好记性不如烂笔头吗?

代码部分:

 方法类内容:

 public class ExamplesGo
    {
        static ISchedulerFactory schedFact = new StdSchedulerFactory();
        public static IScheduler sched = schedFact.GetScheduler();

    }
View Code

任务触发器分离实现:

    #region 1.运行任务【所有】
        /// <summary>
        /// 运行任务
        /// </summary>
        public void Run()
        {
            if (sched != null)
                sched.Start();
        }
        #endregion

        #region 2.添加job
        /// <summary>
        /// 添加job
        /// </summary>
        public void AddJob()
        {
            IJobDetail job = JobBuilder.Create<HelloJob>()
                            .WithIdentity("HelloJob", "group1")
                            .StoreDurably()
                            .Build();
            sched.AddJob(job, true);
        }
        #endregion

        #region 3.添加触发器
        /// <summary>
        /// 添加触发器
        /// </summary>
        /// <param name="job">需要添加触发器的job</param>
        public void AddTrigger(IJobDetail job)
        {
            ITrigger trigger = TriggerBuilder.Create()
                                          .WithIdentity("myTrigger", "group1")
                                          .WithCronSchedule("0/5 * * * * ?")     //5秒执行一次
                                          .ForJob(job)
                                          .Build();
            sched.ScheduleJob(trigger);
        }
        public void AddTrigger1(IJobDetail job)
        {
            ITrigger trigger = TriggerBuilder.Create()
                                          .WithIdentity("myTrigger2", "group1")
                                          .WithCronSchedule("0/1 * * * * ?")     //5秒执行一次
                                          .ForJob(job)
                                          .Build();
            sched.ScheduleJob(trigger);
        }
        #endregion

        #region 4.根据key返回Job
        /// <summary>
        /// 根据key返回Job
        /// </summary>
        /// <param name="jobName">需要查找的job名称</param>
        /// <returns></returns>
        public IJobDetail GetJob(string jobName)
        {

            JobKey jobKey = sched.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()).ToList().Where(b => b.Name == jobName).FirstOrDefault();
            return sched.GetJobDetail(jobKey);
        }
        #endregion
View Code

基本的暂停,恢复,删除:

   #region 5.暂停任务[全部暂停]
        /// <summary>
        /// 暂停任务
        /// </summary>
        public void PauseAll()
        {
            if (sched != null)
                sched.PauseAll();
        }
        #endregion

        #region 6.暂停任务【单个任务】
        /// <summary>
        /// 暂停任务
        /// </summary>
        /// <param name="jobName">需要暂停任务的名称</param>
        public void Shutdown(string jobName)
        {
            if (sched != null)
            {
                JobKey jobKey = sched.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()).ToList().Where(b => b.Name == jobName).FirstOrDefault();
                sched.PauseJob(jobKey);
            }

        }
        #endregion

        #region 7.恢复当前任务
        /// <summary>
        /// 恢复当前任务
        /// </summary>
        /// <param name="jobName">需要恢复任务的名称</param>
        public void ResumeJob(string jobName)
        {
            if (sched != null)
            {
                JobKey jobKey = sched.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()).ToList().Where(b => b.Name == jobName).FirstOrDefault();
                sched.ResumeJob(jobKey);
            }

        }
        #endregion

        #region 8.恢复所有任务
        /// <summary>
        /// 恢复所有任务
        /// </summary>
        public void ResumeJobAll()
        {
            if (sched != null)
            {
                sched.ResumeAll();
            }

        }
        #endregion

        #region 9.删除当前任务
        /// <summary>
        /// 删除当前任务
        /// </summary>
        /// <param name="jobName">删除任务名称</param>
        public void DeleteJob(string jobName)
        {
            if (sched != null)
            {
                JobKey jobKey = sched.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()).ToList().Where(b => b.Name == jobName).FirstOrDefault();
                sched.DeleteJob(jobKey);
            }
        }
        #endregion

        #region 10.删除所有任务
        /// <summary>
        /// 删除所有任务
        /// </summary>
        public void DeleteJobAll()
        {
            if (sched != null)
            {
                sched.Clear();
            }
        }
        #endregion
View Code

最后一些复杂点的查询:

 #region 11.返回所有任务键
        /// <summary>
        /// 返回所有任务键
        /// </summary>
        /// <returns></returns>
        public List<JobKey> GetJobAll()
        {
            //获取所有job
            List<JobKey> jobKeys = sched.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()).ToList();
            return jobKeys;
        }
        #endregion

        #region 12.返回所有的触发器
        /// <summary>
        /// 返回所有的触发器
        /// </summary>
        /// <returns></returns>
        public List<TriggerKey> GetTrigAll()
        {
            List<TriggerKey> trigKeys = sched.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup()).ToList();
            return trigKeys;
        }
        #endregion

        #region 13.返回job对应的trigger
        /// <summary>
        /// 返回job对应的trigger
        /// </summary>
        /// <param name="jobName">任务名称</param>
        /// <returns></returns>
        public List<ITrigger> GetJobToTrig(string jobName)
        {
            JobKey jobKey = sched.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()).ToList().Where(b => b.Name == jobName).FirstOrDefault();
            List<ITrigger> triggerList = sched.GetTriggersOfJob(jobKey).ToList();
            return triggerList;
        }
        #endregion
View Code

最后添加的两个一个关闭组件和修改触发器:

 #region 14.关闭所有任务
        /// <summary>
        /// 关闭所有任务
        /// </summary>
        public void Shutdown()
        {
            if (sched != null)
                sched.Shutdown();
        }
        #endregion

        #region 15.修改任务触发器
        public void ModiyTrig()
        {
            ITrigger trigger = TriggerBuilder.Create()
               .WithIdentity("myTrigger", "group1")
                // .StartAt(runTime)
                .WithCronSchedule("0/10 * * * * ?")     //10秒执行一次
               .Build();
            sched.RescheduleJob(trigger.Key, trigger);
            sched.Start();
        }
        #endregion
View Code

 

目录
相关文章
|
12天前
|
Java Spring
springboot单类集中定义线程池
该内容是关于Spring中异步任务的配置和使用步骤。首先,在启动类添加`@EnableAsync`注解开启异步支持。然后,自定义线程池类`EventThreadPool`,设置核心和最大线程数、存活时间等参数。接着,将线程池bean注入到Spring中,如`@Bean(&quot;RewardThreadPool&quot;)`。最后,在需要异步执行的方法上使用`@Async`注解,例如在一个定时任务类中,使用`@Scheduled(cron = &quot;...&quot;)`和`@Async`结合实现异步定时任务。
14 2
|
5月前
|
C# 开发者
C#扩展方法和工具类的区别
扩展方法和工具类的主要区别在于它们的作用。扩展方法旨在扩展现有的类,而工具类旨在提供一组通用且可靠的方法来执行某些任务。当需要扩展现有的类时,使用扩展方法;当需要实用函数来执行通用任务时,使用工具类。
36 0
|
4月前
|
Java Linux 调度
Java【付诸实践 03】Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
Java【付诸实践 03】Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
51 2
|
9月前
|
Java 调度
【JavaEE】线程的创建及常见方法解析(Tread类)
【JavaEE】线程的创建及常见方法解析(Tread类)
|
10月前
|
SQL 存储 XML
Mybatis返回集合类型到底是空集合还是null?源码解读
Mybatis返回集合类型到底是空集合还是null?源码解读
179 0
JAVA8 Spliterator 并行迭代器用法以及 自定义Spliterator (二)
JAVA8 Spliterator 并行迭代器用法以及 自定义Spliterator (二)
JAVA8 Spliterator 并行迭代器用法以及 自定义Spliterator (二)
|
Java 数据处理
JAVA8 Spliterator 并行迭代器用法以及 自定义Spliterator (一)
JAVA8 Spliterator 并行迭代器用法以及 自定义Spliterator (一)
JAVA8 Spliterator 并行迭代器用法以及 自定义Spliterator (一)
|
存储 XML 缓存
Flowable基本使用介绍和Flowable数据库表解释
lowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据,等等。
4086 1
|
存储 Java 数据库连接
这种方式整合Quartz你见过吗?
`Quartz`是一款优秀的任务调度框架,支持内存、JDBC的形式来存储未执行的任务列表,支持多个任务节点同时执行任务,支持任务漂移到不同的节点执行。
|
安全
CollectionUtils工具类的常用方法
集合判断:   例1: 判断集合是否为空:  CollectionUtils.isEmpty(null): true  CollectionUtils.isEmpty(new ArrayList()): true    CollectionUtils.
1990 0