0

配置:

<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();
        }

结果: 在此处输入图像描述

服务正常运行。我关机了几秒钟,然后我重新开始。作业同时运行了好几次。

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

4

1 回答 1

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

我将在此处复制标题信息,以防 url “死”,您(或更可能的未来读者)可以使用以下文本搜索文章。

Quartz scheduler misfire 指令解释 有时 Quartz 不能在你想要的时候运行你的工作。这有三个原因: 所有工作线程都忙于运行其他作业(可能具有更高的优先级) 调度程序本身已关闭 作业的开始时间安排在过去(可能是编码错误)

于 2017-04-10T18:31:25.593 回答