.net5 quartz
-
安装quartz.aspnetcore
-
ConfigureServices中注入
//services.AddHostedService<Worker>();
services.AddQuartz(q =>
{
//依赖注入
q.UseMicrosoftDependencyInjectionJobFactory();
// 基本Quartz调度器、作业和触发器配置
var jobKey = new JobKey("jobname", "groupName");
q.AddJob<TestJob>(jobKey, j => j
.WithDescription("My work")
);
q.AddTrigger(t => t
.WithIdentity("x")
.ForJob(jobKey)
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(2))
.RepeatForever())//持续工作
.WithDescription("My work trigger")
);
});
// ASP.NET核心托管-添加Quartz服务器
services.AddQuartzServer(options =>
{
// 关闭时,我们希望作业正常完成
options.WaitForJobsToComplete = false;
});
TestJob内容如下
public class TestJob : IBaseJob
{
public virtual Task Execute(IJobExecutionContext context)
{
return Console.Out.WriteLineAsync($"job工作了 在{DateTime.Now}");
}
动态添加计划
public async void Start()
{
// 1.创建scheduler的引用
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = await schedFact.GetScheduler();
//2.启动 scheduler
await sched.Start();
// 3.创建 job
IJobDetail job = JobBuilder.Create<TestJob>()
.WithIdentity("job1", "group1")
.Build();
// 4.创建 trigger
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
//.WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever())
.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
.Build();
// 5.使用trigger规划执行任务job
await sched.ScheduleJob(job, trigger);
}
quartz传递参数
可以通过SetJobData来传递一个JobDataMap类型的参数
quartz.AddJob<T>(jobKey, j =>
{
j.SetJobData(new JobDataMap
{
{"id", "test"},
});
}
);
扩展封装
public static class QuartzEx
{
public static void addSchedule<T>(this IServiceCollectionQuartzConfigurator quartz, string id, string groupName, string desc, int intervalSecond, JobDataMap newJobDataMap) where T : IJob
{
// 基本Quartz调度器、作业和触发器配置
JobKey jobKey = new JobKey(nameof(T), groupName);
quartz.AddJob<T>(jobKey, j =>
{
j.WithDescription(desc);
j.SetJobData(newJobDataMap);
}
);
quartz.AddTrigger(t => t
.WithIdentity(id)
.ForJob(jobKey)
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(intervalSecond))
.RepeatForever())//持续工作
.WithDescription(desc)
);
}
}
留待后查,同时方便他人
联系我:renhanlinbsl@163.com
联系我:renhanlinbsl@163.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2021-07-26 linux下特殊文件与重定向
2016-07-26 简单工厂模式