Quartz.net持久耐用且集群

时间:2017-03-30 10:38:49

标签: quartz.net quartz

配置:

<quartz>
    <add key="quartz.scheduler.instanceName" value="ChengongDemo" />
    <add key="quartz.scheduler.instanceId" value="AUTO" />

    <!--线程池-->
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="5" />
    <add key="quartz.threadPool.threadPriority" value="Normal" />

    <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
    <add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
    <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
    <add key="quartz.jobStore.dataSource" value="myDb" />
    <add key="quartz.dataSource.myDb.connectionString" value="Data Source=192.168.15.23;Initial Catalog=Quartz;User ID=sa;Password=123456789" />
    <add key="quartz.dataSource.myDb.provider" value="SqlServer-20" />

    <!-- 集群-->
    <add key="quartz.jobStore.Clustered" value="true" />
    <add key="quartz.jobStore.clusterCheckinInterval" value="600" />
  </quartz>

代码:

 public static void Run()
           {
                ISchedulerFactory sf = new StdSchedulerFactory();
                Sched = sf.GetScheduler();

            var jobDetail = new JobKey("job1", "group1");
            var triggerKey = new TriggerKey("trigger1", "group1");
            if (!Sched.CheckExists(jobDetail) && !Sched.CheckExists(jobDetail))
            {
                var job = JobBuilder.Creaenter code herete<TestJob>()
                  .WithIdentity(jobDetail)
                  .Build();

                var trigger = TriggerBuilder.Create()
                .WithIdentity(triggerKey)
                .ForJob(job.Key)
                .WithCronSchedule("*/2 * * ? * *")
                .Build();

                Sched.ScheduleJob(job, trigger);
            }

            Sched.Start();
        }

结果: enter image description here

服务正常运行。我躲了几秒钟,然后我又开始了 约伯同时跑了好几次。

为什么?有人可以帮助我吗?感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您想禁止“同时运行”,请应用

DisallowConcurrentExecution 

属性

https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/more-about-jobs.html

[DisallowConcurrentExecution]
public class MyDoesNotRunConcurrentlyJob : IJob
{

然而,我认为你所经历的是你第一次遇到“错误”,或者工作没有在乌托邦时间表上执行......那么就有规则。

我会阅读以下网址。虽然它对于java-quartz(和quartz.net是一个“端口”(到.net),但下面是理解失火的最佳迷你资源。

他甚至提到了你的具体案例

“调度程序本身已关闭”

http://www.nurkiewicz.com/2012/04/quartz-scheduler-misfire-instructions.html

我会在这里复制标题信息,以防网址“死亡”,您(或更有可能未来的读者)可以使用以下文字搜索文章。

Quartz调度程序失火说明解释 有时Quartz无法在您需要的时候运行您的工作。这有三个原因: 所有工作线程都在忙于运行其他工作(可能具有更高的优先级) 调度程序本身已关闭 工作安排在过去的开始时间(可能是编码错误)