75 lines
2.9 KiB
C#
75 lines
2.9 KiB
C#
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))
|
||
.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();
|
||
}
|
||
} |