Quartz.Net的基本使用方法
Quartz.Net的基本使用是比较简单的,主要是对下面三个工具的创建和使用。
- Scheduler调度器
- Job执行的动作
- Trigger触发器
Scheduler的创建和使用
scheduler的创建有几种不同的方式,但一般可以直接使用其提供的工厂类直接创建
- 通过工厂类创建-----像StdSchedulerFactory和DirectSchedulerFactory
/*StdFactory是用到最多的情况,亦可以通过NameValueCollection读取不同形式的键值对参数(.prop,.txt应该都可以),其创建的Scheduler即为StdScheduler类型*/
StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = await stdSchedulerFactory.GetScheduler();
/*directfatory和stdfactory有很多区别,一般可以用于更细节的Custom,
1. directfactory为单例设计
2. directfactory可以通过CreateScheduler(args)自定scheduler
3. directfactory无法通过键值对获取初始属性 */
DirectSchedulerFactory directSchedulerFactory = DirectSchedulerFactory.Instance;
directSchedulerFactory.CreateScheduler(new DefaultThreadPool(), new RAMJobStore());
IScheduler scheduler2 = await directSchedulerFactory.GetScheduler();
- 绑定Job和Trigger
在scheduler里绑定对应的Job和Trigger,然后调用Start()开始即可。
static async Task Main(string[] args)
{
StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = await stdSchedulerFactory.GetScheduler();
//这里先直接使用builder创建trigger,在后面再详细的解释(PS:withRepeateCount的实际执行次数为count+1)
ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(action => {
action.WithIntervalInSeconds(2).WithRepeatCount(1); }).WithIdentity("TriggerOne").Build();
//创建一个简单的Job,一般的Job都有很多的参数,这里先用无参的方法替代一下。
IJobDetail job = JobBuilder.Create<SimpleJob>().WithIdentity("JOB:one").Build();
await scheduler.ScheduleJob(job, trigger);
await scheduler.Start();
//停主线程--查看效果
Thread.Sleep(7000);
}
public class SimpleJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
Console.WriteLine("Hello QuartZnet!");
}
}
Job的创建和参数的传递
只要实现IJob接口的类就可以称之为Job类,
IJob接口只有Execute(IJobExecutionContext context)方法。
其context为上下文参数,保存着IJob执行过程的信息,
也保存着需要的参数。
方法体则为具体的定时业务
Job的传参方式
Job的传参方式为通过JobDetail的JobDataMap进行键值对存取。
static async Task Main(string[] args)
{
StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = await stdSchedulerFactory.GetScheduler();
ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(action => {
action.WithIntervalInSeconds(2).WithRepeatCount(1); }).WithIdentity("TriggerOne").Build();
IJobDetail job = JobBuilder.Create<SimpleJob>().WithIdentity("JOB:one").