这是我的要求。
主要作业:Job1(计划每 5 分钟运行一次) 附属作业:Job2、Job3、Job4、Job5 等,(所有附属作业将具有相同的定义,但只有 JobData 会有所不同)
在每次执行“Job1”期间,将安排一个辅助作业仅执行一次。示例:Job1 的第一次执行:Job“Job2”将在 DateTime.Now 2 分钟后安排。Job2 的第二次执行:Job“Job3”将在 DateTime.Now 2 分钟后安排...
现在,我希望所有作业都使用相同的 Scheduled。我的问题是 Quartz 是否对所有作业使用相同的调度程序,还是我们应该以编程方式设置它?
我正在使用 Windows 服务来启动和停止整个过程。这是 Windows 服务的代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Configuration;
namespace TestScheduling
{
class TestMainClass : ServiceBase
{
TestJobScheduler scheduler = new TestJobScheduler();
public TestMainClass()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
try
{
scheduler.StartScheduler();
scheduler.ScheduleMainJob();
}
catch (Exception e)
{
//Capture Exception
}
}
protected override void OnStop()
{
scheduler.StopScheduler();
}
}
}
这是类 TestJobScheduler 的代码。
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Data.Odbc;
using Quartz;
using Quartz.Impl;
namespace TestScheduling
{
class TestJobScheduler : ITaskScheduler
{
IScheduler sched;
public void ScheduleMainJob()
{
....
sched = getScheduler();
sched.ScheduleJob(job1,trig);
....
ScheduleSubsidiaryJob("job2")
}
public void ScheduleSubsidiaryJob(String jobname)
{
...
/*Create New Trigger and Associate Subsidiary Job with new JobData*/
sched = getScheduler();
sched.ScheduleJob(trig);
}
public IScheduler getScheduler()
{
ISchedulerFactory sf = new StdSchedulerFactory();
return sf.GetScheduler();
}
public void StartScheduler(IJobDetail job, ISimpleTrigger trigger)
{
sched = getScheduler();
sched.Start();
}
public void StopScheduler()
{
if (sched != null)
{
sched.Shutdown();
}
}
}
}
还有一点是我将 AdoJobStore 与 OracleDelegate 一起使用。
有人可以告诉我我是否以正确的方式做事?