Quartz.net简单操作

1.nuget添加Quartz.net

using Quartz;
using Quartz.Impl;
using Quartz.Impl.Triggers;
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace comman
{

    /// <summary>
    /// 定时调度 :处理一般定时任务 Timer,复杂的需要第三方框架
    /// 五大构建:
    /// 1.  调度器:Scheduler
    /// 2.  作业任务:Job
    /// 3.  触发器: Trigger
    /// 4.  线程池: SimpleThreadPool(通过调度器配置)
    /// 5.  作业持久化:JobStore (通过调度器配置)
    ///  步骤:  
    /// 创建调度实例 Scheduler
    /// 继承 IJob 接口,实现具体任务逻辑    
    /// 创建触发器实例 Trigger
    /// 把job、trigger加入调度器(其中job是jobdetail工作实例)    
    /// 启动调度器 Start# 任务的开启、关闭、暂停通过 调度器(Scheduler)相关方法操作# 每个实例的创建不止一种方法,具体查阅详情# Job和触发器的关系:1对1、多对1# quartz.net的持久化,是把job、trigger一些信息存储到数据库里面,以解决内存存储重启丢失。# 项目中使用的时候, 一般单独封装 scheduler、job、trigger
    /// author:mzj
    /// </summary>
    public class QuartzHelp
    { // 创建调度器
        private static IScheduler scheduler;
        // <summary>
        /// 任务工厂
        /// </summary>
        /// <typeparam name="T">工作类</typeparam>
        /// <param name="DetailName">工作名称</param>
        /// <param name="TriggerName">触发器名称</param>
        /// <param name="Minute">多长时间出发一次</param>
        public static async void JobsFactory<T>(string DetailName, string TriggerName, int Minute)
            where T : IJob
        {
            // 创建工厂
            ISchedulerFactory factory = new StdSchedulerFactory();
            // 创建调度器
            scheduler = await factory.GetScheduler();
            // 启动
            await scheduler.Start();
            // 描述工作
            var jobDetail = new JobDetailImpl(DetailName, null, typeof(T));
            //触发器
            ISimpleTrigger trigger = new SimpleTriggerImpl(TriggerName,
                null,
                DateTime.Now,
                null,
                SimpleTriggerImpl.RepeatIndefinitely,
                TimeSpan.FromSeconds(Minute));
            //执行
            await scheduler.ScheduleJob(jobDetail, trigger);
        }

        // <summary>
        /// 任务工厂
        /// </summary>
        /// <typeparam name="T">工作类</typeparam>
        /// <param name="DetailName">工作名称</param>
        /// <param name="TriggerName">触发器名称</param>
        /// <param name="Minute">多长秒触发一次</param>
        /// <param name="Group">组别</param>
        public static async void JobFactory<T>(string DetailName, string TriggerName, int Minute,string GroupName="Group")
           where T : IJob
        {
            // 创建调度器
            scheduler = await StdSchedulerFactory.GetDefaultScheduler();
            // 启动
            await scheduler.Start();
            // 描述工作
            var jobDetail = new JobDetailImpl(DetailName, GroupName, typeof(T));
            // var jobDetails = JobBuilder.Create<T>().WithIdentity(DetailName,GroupName).Build();
            //触发器
            ISimpleTrigger trigger = new SimpleTriggerImpl(TriggerName,
                GroupName,
                DateTime.Now,
                null,
                SimpleTriggerImpl.RepeatIndefinitely,
                TimeSpan.FromSeconds(Minute));
           // var triggers = TriggerBuilder.Create().WithIdentity(TriggerName, GroupName).WithCronSchedule("00 15 10 * *?*").Build();
            //执行
            await scheduler.ScheduleJob(jobDetail, trigger);
        }
        /// <summary>
        /// Cron表达式执行定时任务
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="DetailName"></param>
        /// <param name="TriggerName"></param>
        /// <param name="cron"></param>
        /// <param name="GroupName"></param>
        public static async void JobFactoryByCron<T>(string DetailName, string TriggerName, string cron, string GroupName = "")
          where T : IJob
        {
            // 启动
            await scheduler.Start();
            // 描述工作
            var jobDetail = JobBuilder.Create<T>().WithIdentity(DetailName,GroupName).Build();
            //触发器
            var trigger = TriggerBuilder.Create().WithIdentity(TriggerName, GroupName)
                .WithCronSchedule(cron)
                .Build();
            //执行
            await scheduler.ScheduleJob(jobDetail, trigger);
        }
        /// <summary>
        /// 停止调度
        /// </summary>
        public static async void Shutdown() {
            if (scheduler!=null)
            {
                await scheduler.Shutdown();
            }
        }
    }
}

调用

QuartzHelp.JobFactory<HelloJob>("Job1", "Trigger1", 1);
  public  class HelloJob : Quartz.IJob
    {

         Task  IJob.Execute(IJobExecutionContext context)
        {
            Console.WriteLine("Greetings from HelloJob!");
            return null;
            //throw new NotImplementedException();
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值