首先,创建一个空类,在空类中添加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;
}
}
最后在应用程序的入口中,注入我们写的类
看一下实现的效果
以上的内容是一个小白从各路大神的经验中得来,希望对您有帮助!
路还很长 ,一步步走,请多多进言!!!