.net 6.0定时任务Quzrtz.net的使用

一. 安装nuget包
环境 : .net 6.0 ,vs2022
在这里插入图片描述
二. IOCJobFactory
定义了一个名为 IOCJobFactory 的类,它实现了 IJobFactory 接口。这个类的主要作用是使用依赖注入来创建和管理 Quartz 作业实例

在这里插入public class IOCJobFactory : IJobFactory
    {
        private readonly IServiceProvider _serviceProvider;
        public IOCJobFactory(IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }
        //尝试从依赖注入容器中获取与作业类型匹配的服务。如果找到匹配的服务,那么该服务会被作为 IJob 返回
        public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
        {
            return _serviceProvider.GetService(bundle.JobDetail.JobType) as IJob;

        }

        public void ReturnJob(IJob job)
        {
            var disposable = job as IDisposable;
            disposable?.Dispose();

        }
    }
    代码片

三. QuartzFactory
这个QuartzFactory类的主要作用是创建一个Quartz调度器,并将一个作业和相应的触发器绑定到该调度器上。这样,当触发器满足其Cron表达式时,对应的作业就会被调度并执行。

 public class QuartzFactory
    {
        //1、声明一个调度工厂
        private ISchedulerFactory _schedulerFactory;
        private IScheduler _scheduler = default;
        private IJobFactory _IOCjobFactory;
        public QuartzFactory(ISchedulerFactory schedulerFactory, IJobFactory jobFactory)
        {
            _schedulerFactory = schedulerFactory;
            _IOCjobFactory = jobFactory;
        }
        public async Task<string> Start()
        {
            //2、通过调度工厂获得调度器
            _scheduler = await _schedulerFactory.GetScheduler();
            //这里是指定容器仓库
            _scheduler.JobFactory = _IOCjobFactory;
            //3、开启调度器
            await _scheduler.Start();
            //4、创建一个触发器
            var trigger = TriggerBuilder.Create()
                             .WithCronSchedule("0 55-58/1 13 * * ?") // 每天的 13:50 开始触发  
                            // .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) // 每5秒执行一次
                             // .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever())//每两秒执行一次
                            .Build();
            //5、创建任务
            var jobDetail = JobBuilder.Create<TestJob>()
                            .WithIdentity("job", "group")
                            .Build();
            //6、将触发器和任务器绑定到调度器中
            await _scheduler.ScheduleJob(jobDetail, trigger);
            return await Task.FromResult("将触发器和任务器绑定到调度器中完成");
        }
    }

四 .TestJob
具体定时执行的逻辑代码

    public class TestJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {//定时job的执行内容
            await Task.Run(() => {
                Console.WriteLine($"{DateTime.Now} Hello World!!");
            });
        }
    }

五. 启动类注入

builder.Services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
builder.Services.AddSingleton<QuartzFactory>();
builder.Services.AddSingleton<TestJob>();
builder.Services.AddSingleton<IJobFactory, IOCJobFactory>();


var app = builder.Build();

//这里也可以加入是否启动 Quartz是否启动
if (true)
{
    //获取容器中的QuartzFactory
    var quartz = app.Services.GetRequiredService<QuartzFactory>();
    app.Lifetime.ApplicationStarted.Register(async () =>
    {
        await quartz.Start();
    });

    app.Lifetime.ApplicationStopped.Register(() =>
    {
        //Quzrtz关闭方法
        //quartz.Stop();
    });
}

代码 :

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值