本帖最后由 suijiarui 于 2012-08-11 01:32:55 编辑

解决方案 »

  1.   

    重复发帖浪费分数,让讨论焦点分散,不可取resumeJobGroup的API解释说了(错过的触发,将在恢复时重新执行):
    If any of the Job'sTrigger s missed one or more fire-times, then the Trigger's misfire instruction will be applied.所以我想你应该用standby()会更合适(但这个影响是全局性的):
    When start() is called (to bring the scheduler out of stand-by mode), trigger misfire instructions will NOT be applied during the execution of the start() method - any misfires will be detected immediately afterward (by the JobStore's normal process).或者用unscheduleJob()将这个任务撤掉。
    顺带说一句:在你这个例子里面,pauseJobGroup() 跟 pauseTriggerGroup() 重复,因为pauseJobGroup实际上也是暂停它的triggers:
    Pause all of the JobDetails in the given group - by pausing all of their Triggers.
      

  2.   

    ldh911 standby()和unscheduleJob() 也都试过了也是不行啊 pauseJobGroup() 跟 pauseTriggerGroup() 是我一个不行就两个都加上了 呵呵。兄弟还有什么其他办法吗
      

  3.   

    只要是为了避免重启后调度多此执行 带来负面影响。倒是可以通过其他方式来解决 
    1.在job里加过锁如果处理这那其他的就不能再处理了 但是也不是好的解决方式啊 
    2.利用JobExecutionContext传递参数 但是因为我写好封装 其他人只需要提供job实现类就可以了,通过xml配置让其运行,如果采用这样的方式其他人就有点麻烦了。
      

  4.   

    HelloJob 改成实现StatefulJob试试:HelloJob implements StatefulJob
      

  5.   

    真NM坑爹啊,之前用unscheduleJob不好使,是因为 striger.setStartTime(new Date());
    的问题,结果改为 
    striger.setStartTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").paere(new Date()));
    竟然好了
      

  6.   

    我这边用的是Quartz.Net
    在配置Quartz的时候有这样一句, 
     <add key="quartz.jobStore.misfireThreshold" value="60000"/>
    注释掉这个就不会出现多次调用了。
    上代码 <quartz>
            <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/>
            <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
            <add key="quartz.threadPool.threadCount" value="1"/>
            <add key="quartz.threadPool.threadPriority" value="2"/>
            <!--<add key="quartz.jobStore.misfireThreshold" value="60000"/>-->
            <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>
            <!--******************************Plugin配置********************************************* -->
            <!--<add key="quartz.plugin.xml.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz" />
            <add key="quartz.plugin.xml.fileNames" value=""/>-->
        </quartz>
        public class HelloJob : IJob
        {
            public void Execute(IJobExecutionContext context)
            {
                Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.mmm"));
            }
        }
     
    class Program
        {
            static void Main(string[] args)
            {
                var jobkey = JobKey.Create("job1", "job-group1");
                IJobDetail addJob = JobBuilder.Create<HelloJob>().WithIdentity(jobkey).Build();            ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger1", "trigger-group1")
                    .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever()).Build();            var factory = new StdSchedulerFactory();
                var scheduler = factory.GetScheduler();            scheduler.ScheduleJob(addJob, trigger);            scheduler.Start();            Thread.Sleep(TimeSpan.FromSeconds(10));
                scheduler.DeleteJob(jobkey);            Console.WriteLine("--------------------------------");            Thread.Sleep(TimeSpan.FromSeconds(2));
                scheduler.ScheduleJob(addJob, trigger);            Thread.Sleep(TimeSpan.FromSeconds(10));
                scheduler.Shutdown();            Console.ReadKey();
            }
        }