CSharp-Single-EFCore/Bunny.Service/IService/Service/JobService.cs

111 lines
4.5 KiB
C#
Raw Normal View History

2024-08-14 23:57:43 +08:00
using Bunny.Service.Job;
using Quartz;
using Quartz.Impl;
namespace Bunny.Service.IService.Service;
public class JobService : IJobService
{
/// <summary>
/// 开启一个简单的工作
/// https://www.youtube.com/watch?v=CuHIScZKup8&list=PLSi1BNmQ61ZohCcl43UdAksg7X3_TSmly&index=6
/// </summary>
public void StartSimpleJob()
{
var schedulerFactory = new StdSchedulerFactory();
// TODO 如果使用异步必须使用await 和 async
// var scheduler = schedulerFactory.GetScheduler();
var scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult();
var jobDetail = JobBuilder.Create<SimJob>()
.UsingJobData("username", "用户名")
.UsingJobData("password", "密码")
.WithIdentity("simpleJob", "简单的JOB")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity("testTrigger", "测试发出器")
.StartNow()
// 每隔5秒执行一次一共重复10次
.WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(10))
2024-08-14 23:57:43 +08:00
.Build();
// 使用同步方法
scheduler.ScheduleJob(jobDetail, trigger).GetAwaiter().GetResult();
scheduler.Start().GetAwaiter().GetResult();
// TODO 使用异步
// await _scheduler.ScheduleJob(jobDetail, trigger);
// await _scheduler.Start();
}
/// <summary>
/// 将jobDetail放在触发器中
/// </summary>
public void PutJobDetail4Trigger()
{
var stdSchedulerFactory = new StdSchedulerFactory();
var scheduler = stdSchedulerFactory.GetScheduler().GetAwaiter().GetResult();
var jobDetail = JobBuilder.Create<SimJob>()
.UsingJobData("username", "用户名")
.UsingJobData("password", "密码")
// TODO 如果不设置持久的会报错;
// TODO Jobs added with no trigger must be durable.Quartz.SchedulerException: Jobs added with no trigger must be durable.
.StoreDurably() // 设置作业为持久的
.WithIdentity("simpleJob", "简单的JOB")
.Build();
// 将作业添加到工作中
scheduler.AddJob(jobDetail, true).GetAwaiter().GetResult();
var trigger = TriggerBuilder.Create()
.ForJob(jobDetail)
.UsingJobData("trigger", "trigger值")
.WithIdentity("testTrigger", "测试发出器")
.StartNow()
// TODO 设置调度时间单位
// .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(10))
// TODO 自定义调度时间单位
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromMinutes(1)).WithRepeatCount(10))
.Build();
scheduler.ScheduleJob(trigger).GetAwaiter().GetResult();
scheduler.Start().GetAwaiter().GetResult();
}
2024-08-15 16:37:31 +08:00
/// <summary>
/// 设置每日时间表
/// </summary>
public void SetJobWithDaily()
{
var stdSchedulerFactory = new StdSchedulerFactory();
var scheduler = stdSchedulerFactory.GetScheduler().GetAwaiter().GetResult();
var jobDetail = JobBuilder.Create<SimJob>()
.UsingJobData("username", "用户名")
.UsingJobData("password", "密码")
.StoreDurably() // 设置作业为持久的
.WithIdentity("simpleJob", "简单的JOB")
.Build();
scheduler.AddJob(jobDetail,true).GetAwaiter().GetResult();
var trigger = TriggerBuilder.Create()
.ForJob(jobDetail)
.UsingJobData("trigger", "trigger值")
.WithIdentity("testTrigger", "测试发出器")
.StartNow()
// TODO StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(20, 0))触发器从每天的20:00晚上8点开始。
// TODO EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(22, 0))触发器在每天的22:00晚上10点结束。
// TODO WithIntervalInSeconds(5)在开始和结束时间之间触发器将每5秒触发一次作业。
.WithDailyTimeIntervalSchedule(x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(16, 0))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(22, 0))
.OnDaysOfTheWeek(DayOfWeek.Sunday, DayOfWeek.Monday, DayOfWeek.Thursday)
.WithIntervalInSeconds(2)
)
.Build();
scheduler.ScheduleJob(trigger).GetAwaiter().GetResult();
scheduler.Start().GetAwaiter().GetResult();
}
2024-08-14 23:57:43 +08:00
}