Quartz.Net—IJob特性
IJob默认情况下是无状态的,和其他系统没有关系 特别是job里面的jobdata每次都是新的。可以无限扩展。
PersistJobDataAfterExecution JobData持久化
Job在执行的后会生成一个新的Job为下一次执行,并且返回这个老的Job。 这样就保持了Job的无状态。但是有时候需要让他有状态,就要加上特性PersistJobDataAfterExecutionAttribute,使JobDataMap一直保持。
[PersistJobDataAfterExecution] public class MyJob7 : IJob { public Task Execute(IJobExecutionContext context) { Console.WriteLine(context.JobDetail.JobDataMap["zangfeng"]); context.JobDetail.JobDataMap["zangfeng"] = context.JobDetail.JobDataMap["zangfeng"] + "1"; return Task.Factory.StartNew(() => Console.WriteLine($"工作任务测试7:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}")); } }
DisallowConcurrentExecution 禁用同步执行
一个Job可能会有多个Trigger。导致一个Job,同时执行。
//[PersistJobDataAfterExecution] [DisallowConcurrentExecution] public class MyJob7 : IJob { public Task Execute(IJobExecutionContext context) { Console.WriteLine(context.JobDetail.JobDataMap["zangfeng"]); context.JobDetail.JobDataMap["zangfeng"] = context.JobDetail.JobDataMap["zangfeng"] + "1"; return Task.Factory.StartNew(() => Console.WriteLine($"工作任务测试7:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}")); } }