Quart一个小白的实现

首先,创建一个空类,在空类中添加NutGet包(项目中想简单实现的话可以不用定义类直接一个Api就行),我这用到了一个API和一个类库

 

在新建的infractrostuer中新建一个类

此类为工作类,GPT回答:

Quartz 使用作业工厂来实例化作业对象,以便在调度器中执行作业。通过自定义作业工厂,可以自定义实例化作业的逻辑,例如使用依赖注入容器创建作业实例。

也就是说这里是定义自己需要执行的规则

    /// <summary>
    /// 工厂类
    /// </summary>
    public class JobFactory : IConfigureOptions<QuartzOptions>    //:IJobFactory
    {
        public void Configure(QuartzOptions options)
        {
            var jobKey = JobKey.Create(nameof(WCSJob));//创建一个作业键
            options

                   .AddJob<WCSJob> //添加一个工作
                        (JobBuilder => JobBuilder.WithIdentity(jobKey))//为触发器设置唯一                                        的标识

                   .AddTrigger//添加触发器
                        (trigger => trigger
                            .ForJob(jobKey)//将触发器关联到指定的作业
                            .WithCronSchedule("0/1 * * ? * *"));//Cron表达式(每秒执行一次)
                            #region 简单调度规则
                            //.WithSimpleSchedule
                            //(scheduler=>scheduler
                            //.WithIntervalInSeconds(5)Cycle间隔五秒
                            //.RepeatForever()));无限执行
                            #endregion 
        }
    }

第二个类中,调度器

GPT回答:

Quartz 的核心组件,用于调度和执行作业。调度器是负责接收作业请求、创建和管理触发器、调度和执行作业的中心控制器。通过调度器,可以配置和管理作业、触发器,以及整个调度的行为。调度器负责按照指定的时间表触发作业的执行,可以手动启动和停止调度器。

就是用来调度任务的

 

/// <summary>
    /// 调度器
    /// </summary>
    public static class JobScheduler
    {
        /// <summary>
        /// 拓展服务,注入服务
        /// </summary>
        public static void AddInFractrostuer(this IServiceCollection services)
        {
            #region 
            //StdSchedulerFactory stdScheduler = new StdSchedulerFactory();
            //var scheduler = await stdScheduler.GetScheduler();
            //await scheduler.Start();
            //var trigger = TriggerBuilder.Create()
            //    .WithIdentity("TestTrigger", "TestGrop")
            //    .WithCronSchedule("0/1****?").Build();

            //var JobDetail = JobBuilder.Create<WCSJob>()
            //    .WithDescription("简单测试!!!")
            //    .WithIdentity("TesJob","TestGroup")
            //    .Build();
            //object value = await stdScheduler.ScheduleJob(JobDetail, Trigger);

            //_scheduler = await _schedulerFactory.GetScheduler();
            //_scheduler.JobFactory = _iocjobFactory;
            //_scheduler.Start();
            //var trigger = TriggerBuilder.Create().WithSimpleSchedule(x=>x.WithIntervalInSeconds(2).RepeatForever()).Build();
            //var jobDetail = JobBuilder.Create<WCSJob>().WithIdentity("job","group").Build();
            //await _scheduler.ScheduleJob(jobDetail, trigger);
            //return await Task.FromResult("将触发器和任务器绑定到调度器中完成");
            #endregion
            //添加Quartz服务
            services.AddQuartz(options =>
            {
                options.UseMicrosoftDependencyInjectionJobFactory();//配置quartz,在NET中进行依赖注入容器来创建任务
            });

            services.AddQuartzHostedService(option =>//注册quartz的托管服务,自启动并关闭(优雅)
            {
                option.WaitForJobsToComplete = true;//当关闭时,需要等待执行的任务完成
            });

            services.ConfigureOptions<JobFactory>();//配置任务工厂  因为需要使用工厂依赖注入所以需要配置工厂服务
        }

        public static void LineAll()
        {

        }
    }

第三个类,任务类(切记一定要继承于IJob        

本文中这是为了展现调度的成果的

 

 /// <summary>
    /// 作业
    /// </summary>
    public class WCSJob:IJob
    {
        public readonly ILogger<WCSJob> logger;

        public WCSJob(ILogger<WCSJob> _logger)
        {
            logger= _logger;
        }
        
        /// <summary>
        /// 实现IJob接口
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task Execute(IJobExecutionContext context)
        {
            logger.LogInformation($"{DateTime.Now}");//当任务正在执行,执行的日志记录并返回compltedTask完成
            return Task.CompletedTask;
        }

    }

 最后在应用程序的入口中,注入我们写的类

 看一下实现的效果

以上的内容是一个小白从各路大神的经验中得来,希望对您有帮助!

路还很长 ,一步步走,请多多进言!!!

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值