目前,我正在研究如何使用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");
}
}
我的问题是:
I希望将作业的 scheduling 与作业的 execution 分离。E 210
在上面的示例中,在作业被调度之后,如果进程在计划时间到达时仍在运行,则作业正在此进程内执行。理想情况下,我希望能够有一个专门的服务器,其中包含一个专门用于执行作业的Quartz.NET调度程序实例,并且能够从其他进程调度作业,知道作业将在这个专用服务器上执行。
我尝试简单地在调度作业的进程上将属性"quartz.threadPool.threadCount“设置为"0”,但这会引发异常。调度程序上是否有任何配置属性可以实现我所要做的工作?
发布于 2013-06-13 02:35:55
早上好,
你可以读我的答案这里。
我建议您使用ADO.NET作业库 (而且您似乎正在使用它)。应该配置负责调度作业的应用程序,将属性ZeroSizeThreadPool threadPool设置为
properties["quartz.threadPool.type"] = "Quartz.Simpl.ZeroSizeThreadPool, Quartz";
您可以阅读更多关于这种类型的线程池这里的信息。
负责执行作业的应用程序应配置以下设置:
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
properties["quartz.threadPool.threadCount"] = "10";
properties["quartz.threadPool.threadPriority"] = "Normal";
发布于 2013-06-13 08:02:07
移除线
scheduler.Start();
https://stackoverflow.com/questions/17083230
复制相似问题