配置:
<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
服务正常运行。我躲了几秒钟,然后我又开始了 约伯同时跑了好几次。
为什么?有人可以帮助我吗?感谢您的帮助。
答案 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无法在您需要的时候运行您的工作。这有三个原因: 所有工作线程都在忙于运行其他工作(可能具有更高的优先级) 调度程序本身已关闭 工作安排在过去的开始时间(可能是编码错误)