.NET6 WebApi 实现定时任务调度Quartz

前言
  • 本地json持久化调度任务,无需数据库
  • 直接调用本地类方法,无需通过WebApi接口
1.创建项目,安装组件

创建.NET 6 WebApi项目; 引入GZY.Quartz.MUI 1.1.5

1.1 Progarm.cs下添加代码
builder.Services.AddQuartzUI();
//添加本地调度任务访问
builder.Services.AddQuartzClassJobs(); 

var app = builder.Build();

app.UseQuartz();
1.2 启动项目,IP和端口地址后缀输入 /QuartzUI

在这里插入图片描述

2.添加定时调度任务

通过继承调用本地方法

2.1 创建测试类

继承IJobService,并实现接口

public class TestJob_OneMinute : IJobService
{
    public string ExecuteService(string parameter)
    {
        return "定时任务1已执行成功!";
    }
}
2.2 在QuartzUI界面中添加调度任务

在这里插入图片描述

点击 执行记录 查看执行结果
在这里插入图片描述

3.参考文献

开发者博客

数据库实现持久化调度任务

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Quartz是一个流行的开源任务调度框架,可以帮助我们在.NET Core Web Api中进行任务调度。下面是配置Quartz的步骤: 1. 安装Quartz NuGet包:在Visual Studio中打开NuGet包管理器控制台,运行以下命令安装Quartz NuGet包: ``` Install-Package Quartz ``` 2. 创建Job类:创建一个继承自IJob接口的Job类,实现Execute方法。在这个方法中,你可以编写你的任务逻辑。 ``` public class MyJob : IJob { public async Task Execute(IJobExecutionContext context) { // 编写任务逻辑 } } ``` 3. 配置Scheduler:在Startup.cs文件中,添加以下代码来配置Scheduler: ``` services.AddSingleton<IJobFactory, QuartzJobFactory>(); services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>(); services.AddSingleton(new JobSchedule( jobType: typeof(MyJob), cronExpression: "0 0/5 * * * ?")); // 每5分钟执行一次任务 services.AddHostedService<QuartzHostedService>(); ``` 4. 创建JobSchedule类:创建一个JobSchedule类,用于存储Job的类型和Cron表达式。 ``` public class JobSchedule { public JobSchedule(Type jobType, string cronExpression) { JobType = jobType; CronExpression = cronExpression; } public Type JobType { get; } public string CronExpression { get; } } ``` 5. 创建QuartzJobFactory类:创建一个实现IJobFactory接口的QuartzJobFactory类,用于创建Job实例。 ``` public class QuartzJobFactory : IJobFactory { private readonly IServiceProvider _serviceProvider; public QuartzJobFactory(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) { return (IJob)_serviceProvider.GetService(bundle.JobDetail.JobType); } public void ReturnJob(IJob job) { // do nothing } } ``` 6. 创建QuartzHostedService类:创建一个QuartzHostedService类,实现IHostedService接口,并在StartAsync方法中启动Scheduler。 ``` public class QuartzHostedService : IHostedService { private readonly ISchedulerFactory _schedulerFactory; private readonly IJobFactory _jobFactory; private readonly IEnumerable<JobSchedule> _jobSchedules; public QuartzHostedService( ISchedulerFactory schedulerFactory, IJobFactory jobFactory, IEnumerable<JobSchedule> jobSchedules) { _schedulerFactory = schedulerFactory; _jobFactory = jobFactory; _jobSchedules = jobSchedules; } public IScheduler Scheduler { get; set; } public async Task StartAsync(CancellationToken cancellationToken) { Scheduler = await _schedulerFactory.GetScheduler(cancellationToken); Scheduler.JobFactory = _jobFactory; foreach (var jobSchedule in _jobSchedules) { var job = JobBuilder.Create(jobSchedule.JobType) .WithIdentity(jobSchedule.JobType.FullName) .Build(); var trigger = TriggerBuilder.Create() .WithIdentity($"{jobSchedule.JobType.FullName}.trigger") .WithCronSchedule(jobSchedule.CronExpression) .Build(); await Scheduler.ScheduleJob(job, trigger, cancellationToken); } await Scheduler.Start(cancellationToken); } public async Task StopAsync(CancellationToken cancellationToken) { await Scheduler?.Shutdown(cancellationToken); } } ``` 现在,你已经成功地配置了Quartz,可以在MyJob类中编写你的任务逻辑了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DotNeter-Hpf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值