简单记录下,关键是RescheduleJob(triggerKey, newTrigger)方法来重启服务
新建Httpjob.cs
public class Httpjob : IJob {
public async Task Execute(IJobExecutionContext context) {
DateTime SDate = DateTime.Now;
JobDataMap data = context.JobDetail.JobDataMap;
string url = data.GetString("url");
string appid = data.GetString("appid");
string token = data.GetString("token");
string jobid = data.GetString("jobid");
DateTimeOffset dtf = (DateTimeOffset)context.NextFireTimeUtc;
try {
Console.WriteLine("------------------------------------------");
Console.WriteLine($"appid:{appid},token:{token},jobid:{jobid},{DateTime.Now}");
}
catch(Exception e) {
throw new Exception(e.Message);
}
}
}
新建DemoSchedule.cs服务开始和重启的方法
public static class DemoSchedule {
static ISchedulerFactory factory;
static IScheduler scheduler;
static DemoSchedule() {
factory = new StdSchedulerFactory();
}
public static async void start(List<JobList> jobLists) {
scheduler = await factory.GetScheduler();
await scheduler.Start();
foreach (var item in jobLists) {
IJobDetail job = JobBuilder.Create<Httpjob>()
.WithIdentity(item.jobid, item.jobgroup)
.UsingJobData("url", item.url)
.UsingJobData("appid", item.appid)
.UsingJobData("token", item.token)
.UsingJobData("jobid", item.jobid)
.Build();
//NextGivenSecondDate:如果第一个参数为null则表名当前时间往后推迟2秒的时间点。
DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 5);
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(item.jobname, item.jobgroup)
.StartAt(startTime)
.WithCronSchedule(item.cron)
.Build();
await scheduler.ScheduleJob(job, trigger);
}
}
public static async void Restart(List<JobList> jobLists) {
scheduler = await factory.GetScheduler();
foreach (var item in jobLists) {
TriggerKey triggerKey = new TriggerKey(item.jobname, item.jobgroup);
if (!(await scheduler.GetTrigger(triggerKey) is ICronTrigger trigger)) {
IJobDetail job = JobBuilder.Create<Httpjob>()
.WithIdentity(item.jobid, item.jobgroup)
.UsingJobData("url", item.url)
.UsingJobData("appid", item.appid)
.UsingJobData("token", item.token)
.UsingJobData("jobid", item.jobid)
.Build();
//NextGivenSecondDate:如果第一个参数为null则表名当前时间往后推迟2秒的时间点。
DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 5);
ITrigger triggerNew = TriggerBuilder.Create()
.WithIdentity(item.jobname, item.jobgroup)
.StartAt(startTime)
.WithCronSchedule(item.cron)
.Build();
await scheduler.ScheduleJob(job, triggerNew);
return;
}
string oldCron = trigger.CronExpressionString;
if (!oldCron.Equals(item.cron, StringComparison.OrdinalIgnoreCase)) {
var newTrigger = TriggerBuilder.Create()
.WithIdentity(item.jobname, item.jobgroup)
.WithCronSchedule(item.cron)
.Build() as ICronTrigger;
await scheduler.RescheduleJob(triggerKey, newTrigger);
}
//else {
// IJobDetail job = JobBuilder.Create<Httpjob>()
// .WithIdentity(item.jobid, item.jobgroup)
// .UsingJobData("url", item.url)
// .UsingJobData("appid", item.appid)
// .UsingJobData("token", item.token)
// .UsingJobData("jobid", item.jobid)
// .Build();
// //NextGivenSecondDate:如果第一个参数为null则表名当前时间往后推迟2秒的时间点。
// DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 5);
// ITrigger triggerNew = TriggerBuilder.Create()
// .WithIdentity(item.jobname, item.jobgroup)
// .StartAt(startTime)
// .WithCronSchedule(item.cron)
// .Build();
// await scheduler.ScheduleJob(job, triggerNew);
//}
}
}
}
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://i-blog.csdnimg.cn/blog_migrate/9798c6a63f5bee1b1afc73154bdce49c.gif)
可以通过传入服务列表Start启动服务,可以通过传入需要重启的定时服务Restart重启服务
static void Main(string[] args) {
List<JobList> jobLists = new List<JobList>() {
new JobList(){jobid="001",appid="A",token="test1",jobgroup="1",jobname="job_A",cron="0/5 * * * * ? *"},
//new JobList(){jobid="002",appid="B",token="test2",jobgroup="2",jobname="job_B",cron="0/5 * * * * ? *"},
//new JobList(){jobid="003",appid="C",token="test3",jobgroup="3",jobname="job_C",cron="0/5 * * * * ? *"}
};
DemoSchedule.start(jobLists);
var str = Console.ReadLine();
if (str == "test") {
Console.WriteLine("**************");
List<JobList> list = new List<JobList>() {
new JobList(){jobid="001",appid="A",token="test1",jobgroup="1",jobname="job_A",cron="0/10 * * * * ? *"},
new JobList(){jobid="002",appid="B",token="test2",jobgroup="2",jobname="job_B",cron="0/5 * * * * ? *"}
//new JobList(){jobid="003",appid="C",token="test3",jobgroup="3",jobname="job_C",cron="0/5 * * * * ? *"}
};
DemoSchedule.Restart(list);
Console.ReadKey();
}
Console.ReadKey();
}
}
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://i-blog.csdnimg.cn/blog_migrate/9798c6a63f5bee1b1afc73154bdce49c.gif)
代码段 小部件