Azure-多个工作角色-无法存储作业:无法存储作业:'job6',因为此标识已存在 [英] Azure - multiple worker roles - Couldn't store job: Unable to store Job: 'job6', because one already exists with this identification

查看:61
本文介绍了Azure-多个工作角色-无法存储作业:无法存储作业:'job6',因为此标识已存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Quartz.Net计划程序来计划我的工作.我正在使用ADOJOBSTORE来存储所有这些值.

I'm using Quartz.Net scheduler to schedule my jobs. I'm using ADOJOBSTORE to store all these values.

无法存储作业:无法存储作业:'job6',因为此标识已经存在 当我尝试运行它时,抛出以上错误.有什么主意吗?

Couldn't store job: Unable to store Job: 'job6', because one already exists with this identification When I try to run it throwing the above error. Any idea?

        ILog log = LogManager.GetLogger(typeof(CronTrigger));

        log.Info("------- Initializing -------------------");

        // First we must get a reference to a scheduler
        ISchedulerFactory sf = new StdSchedulerFactory();
        IScheduler sched = sf.GetScheduler();

        log.Info("------- Initialization Complete --------");

        log.Info("------- Scheduling Jobs ----------------");

        // jobs can be scheduled before sched.start() has been called



        // job 6 will run every 30 seconds but only on Weekdays (Monday through Friday)
        IJobDetail job = JobBuilder.Create<SimpleJob>()
            .WithIdentity("job6", "group1")
            .Build();

        ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                     .WithIdentity("trigger6", "group1")
                                     .WithCronSchedule("0,30 * * ? * MON-FRI")
                                     .Build();

        DateTimeOffset ft = sched.ScheduleJob(job, trigger);
        log.Info(job.Key + " has been scheduled to run at: " + ft
                 + " and repeat based on expression: "
                 + trigger.CronExpressionString);


        log.Info("------- Starting Scheduler ----------------");

        // All of the jobs have been added to the scheduler, but none of the
        // jobs
        // will run until the scheduler has been started
        sched.Start();

        log.Info("------- Started Scheduler -----------------");

        //log.Info("------- Waiting five minutes... ------------");
        //try
        //{
        //    // wait five minutes to show jobs
        //    Thread.Sleep(300 * 1000);
        //    // executing...
        //}
        //catch (ThreadInterruptedException)
        //{
        //}

        //log.Info("------- Shutting Down ---------------------");

        //sched.Shutdown(true);

        //log.Info("------- Shutdown Complete -----------------");

        SchedulerMetaData metaData = sched.GetMetaData();
        log.Info(string.Format("Executed {0} jobs.", metaData.NumberOfJobsExecuted));

这是我的app.config设置

Here are my app.config settings

<add key="quartz.scheduler.instanceId" value="AUTO"/>
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
<add key="quartz.threadPool.threadCount" value="10"/>
<add key="quartz.threadPool.threadPriority" value="2"/>

<add key="quartz.jobStore.misfireThreshold" value="60000"/>


<add key="quartz.jobStore.clustered" value="true"/>
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"/>
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz" />
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
<add key="quartz.jobStore.dataSource" value="myDS"/>

<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"/>
<!-- i have modifed for this post -->
<add key="quartz.dataSource.myDS.connectionString" value="Server=mydatabaseconnectionstring goes here;Trusted_Connection=False;Encrypt=True;"/>

<add key="quartz.dataSource.myDS.provider" value="SqlServer-20"/>
<add key="quartz.jobStore.useProperties" value="true"/>

推荐答案

这是因为ScheduleJob每次都会尝试添加作业.您应该使用带有重载的AddJob来指定是覆盖现有作业,还是仅添加一次作业(检查是否存在),然后在需要时添加新触发器.

This is because ScheduleJob will try add the job every time. You should either use AddJob with overload specifying whether to overwrite existing or just add the job once (check for existence) and then add new triggers when needed.

使用AdoJobStore时,触发器和作业将在持久保存的同时进行第二次运行.在您的情况下,您可能已经运行了一次代码,因此该作业存在于持久性作业存储中.有了RamJobStore,自然将是另一回事.

When using AdoJobStore the trigger and jobs will be there on the second run as they are persisted. In your case you have propably already ran the code once and thus the job exists the persistent job store. With RamJobStore it would naturally be a different thing.

这篇关于Azure-多个工作角色-无法存储作业:无法存储作业:'job6',因为此标识已存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆