当前位置:网站首页>.Net Core 下使用 Quartz —— 【7】作业和触发器之简单触发器
.Net Core 下使用 Quartz —— 【7】作业和触发器之简单触发器
2022-04-23 05:55:00 【番茄大侠本尊】
1、为特定时间建立触发器,不要重复
//在某个时间点执行一次,不重复
ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(DateTime.Parse("2020-10-27 15:41"))
.Build();
2、每隔3秒触发一次,重复三次(触发4次)
//每隔3秒触发一次,重复三次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.StartAt(DateTime.Parse("2020-10-27 15:48")) // 如果不写开始时间,将从当前时间开始
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(3)
.WithRepeatCount(3)) // 写的3次,但是会触发4次(算上最开始的一次)
.Build();
3、在未来5秒触发一次
//在未来5秒触发一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger5", "group1")
.StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second))
.Build();
4、每5s执行一次,直到22点
//每5s执行一次,直到22点
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger7", "group1")
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever())
.EndAt(DateBuilder.DateOf(22, 0, 0))
.Build();
5、从下一分钟的头部开始,每5秒执行一次
//从下一分钟的头部开始,每5秒执行一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger8")
.StartAt(DateBuilder.EvenMinuteDate(null))
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever())
.Build();
完整代码:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
//注册调度器工厂
services.AddSingleton<ISchedulerFactory>(new StdSchedulerFactory());
}
HomeController.cs
using Microsoft.AspNetCore.Mvc;
using Quartz;
using Quartz.Impl.Calendar;
using System;
using System.Threading.Tasks;
namespace QuartzLearn.Controllers
{
public class HomeController : Controller
{
//调度器工厂
private readonly ISchedulerFactory _schedulerFactory;
//构造函数注入
public HomeController(ISchedulerFactory schedulerFactory)
{
//注入调度器工厂
_schedulerFactory = schedulerFactory;
}
public async Task<IActionResult> Index()
{
IScheduler scheduler = await _schedulerFactory.GetScheduler();
await scheduler.Start();
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "jobGroup1")
.UsingJobData("name", "zhangsan")
.Build();
//在某个时间点执行一次,不重复
//ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
// .WithIdentity("trigger1", "group1")
// .StartAt(DateTime.Parse("2020-10-27 15:41"))
// .Build();
//每隔3秒触发一次,重复三次
//ITrigger trigger = TriggerBuilder.Create()
// .WithIdentity("trigger3", "group1")
// .StartAt(DateTime.Parse("2020-10-27 15:48")) // 如果不写开始时间,将从当前时间开始
// .WithSimpleSchedule(x => x
// .WithIntervalInSeconds(3)
// .WithRepeatCount(3)) // 写的3次,但是会触发4次(算上最开始的一次)
// .Build();
//在未来5秒触发一次
//ITrigger trigger = TriggerBuilder.Create()
// .WithIdentity("trigger5", "group1")
// .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second))
// .Build();
//每5s执行一次,直到22点
//ITrigger trigger = TriggerBuilder.Create()
// .WithIdentity("trigger7", "group1")
// .WithSimpleSchedule(x => x
// .WithIntervalInSeconds(5)
// .RepeatForever())
// .EndAt(DateBuilder.DateOf(22, 0, 0))
// .Build();
//从下一分钟的头部开始,每5秒执行一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger8")
.StartAt(DateBuilder.EvenMinuteDate(null))
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever())
.Build();
await scheduler.ScheduleJob(job, trigger);
return View();
}
}
[DisallowConcurrentExecution]
[PersistJobDataAfterExecution]
public class HelloJob : IJob
{
public string Name { private get; set; }
public async Task Execute(IJobExecutionContext context)
{
await Console.Out.WriteLineAsync($"This is HelloJob {DateTime.Now}");
}
}
}
版权声明
本文为[番茄大侠本尊]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Tomato2313/article/details/109312555
边栏推荐
猜你喜欢
五个路由守卫的使用
死区时间的分析与设置
FOC single resistance sampling position loop control servo motor
uniapp 自定义搜索框适配小程序对齐胶囊
QT icon application
Use of shell scripts & and 𞓜
2020 Jiangsu Collegiate Programming Contest-A.Array
说说ts的心里话
[UDS unified diagnostic service] II. Network layer protocol (1) - overview and functions of network layer
[UDS unified diagnosis service] i. diagnosis overview (1) - diagnosis overview
随机推荐
JS实现私有属性
元编程,代理Proxy与反射Reflect
使用jsonwebtoken生成访问密钥
Oracle改成mysql
【无标题】js中的类型判断
C language code specification
查漏补缺(九)---程序篇
Node的数据库编程
[stepping on the pit] MELD in win11 wsl2 cannot be used normally. Problem repair
C语言 #和##的使用
查漏补缺(七)
Principle and characteristic analysis of triode
提交本地仓库并同步码云仓库
查漏补缺(五)
信息学一本通-小球
手动实现简单的Promise及其基础功能
JS中 t, _ => 的解析
Interprocess communication - mutex
邮箱字符串判断
深蓝学院激光slam 理论与实践 第三章激光雷达去畸变 作业习题