現在、自分のシステムでタスクをスケジュールするために Quartz.NET を使用して調査しています。私が Quartz.NET をどのように使用しているかの例として、以下はタスクをスケジュールする方法を示す非常に単純な例です。
class Program
{
static void Main(string[] args)
{
var properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "TestScheduler";
properties["quartz.scheduler.instanceId"] = "instance_one";
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
properties["quartz.jobStore.useProperties"] = "true";
properties["quartz.jobStore.dataSource"] = "default";
properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz";
properties["quartz.dataSource.default.connectionString"] = "Server=.\\SqlExpress;Database=quartz;Trusted_Connection=True;";
properties["quartz.dataSource.default.provider"] = "SqlServer-20";
var scheduler = new StdSchedulerFactory(properties).GetScheduler();
scheduler.Start();
TriggerSimpleJob(scheduler);
Console.WriteLine("Waiting For Job");
Console.ReadLine();
}
private static void TriggerSimpleJob(IScheduler scheduler)
{
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(DateBuilder.EvenSecondDateAfterNow())
.UsingJobData("myTriggerParameter", "myTriggerValue")
.UsingJobData("myParameter", "triggerParameter")
.Build();
IJobDetail jobDetail = JobBuilder.Create<SimpleJob>().WithIdentity("job1", "group1")
.UsingJobData("myParameter", "myValue")
.Build();
scheduler.ScheduleJob(jobDetail, trigger);
}
}
public class SimpleJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Job completed");
}
}
私が持っている質問はこれです:
ジョブの実行からジョブのスケジューリングを切り離したいと思います。
上記の例では、ジョブがスケジュールされた後、スケジュールされた時間にプロセスがまだ実行されている場合、ジョブはこのプロセス内で実行されています。理想的には、ジョブの実行専用の Quartz.NET スケジューラのインスタンスを実行する専用サーバーを用意し、この専用サーバーでジョブが実行されることを認識して他のプロセスからジョブをスケジュールできるようにしたいと考えています。
ジョブをスケジュールするプロセスでプロパティ「quartz.threadPool.threadCount」を「0」に単純に設定しようとしましたが、例外がスローされます。私がやろうとしていることを達成するスケジューラーの構成プロパティはありますか?