【问题标题】:c# Quartz how to toggle schedule a job which is designed to run hourly and dailyc# Quartz 如何切换计划每小时和每天运行的作业
【发布时间】:2016-10-27 00:01:24
【问题描述】:

我是 Quartz.Net 的新手。我有一份计划每小时和每天运行的工作。请在下面找到我的日程安排服务详情。

现在我想切换时间表,以便我可以启用或禁用每小时或每天的时间表。

public class SchedulerService : ISchedulerService
{
    private readonly IScheduler _scheduler;
    private readonly IConfigurationReader _configReader;

    public SchedulerService(IScheduler scheduler, IConfigurationReader configReader)
    {
        _scheduler = scheduler;
        _configReader = configReader;
    }       
    public void Start()
    {
        StartScheduledJobs();
    }   
    public void Stop()
    {
        _scheduler.Shutdown(true);
    }       
    private void StartScheduledJobs()
    {
        try
        {
            _scheduler.Start();

            if(_configReader.HourlyChangeJobEnabled) //Will this work? or is this the way to achieve this?
                ScheduleHourlyChangesJob();
            if(_configReader.DailyChangeJobEnabled) 
                ScheduleDailyChangesJob();
        }
        catch (Exception ex)
        {
            _logProvider.Error("", ex);
        }
    }   

    private void ScheduleHourlyChangesJob()
    {
        var jobDetail = JobBuilder.Create<SimpleJob>()
            .WithIdentity("hourlyJob", "group1")
            .UsingJobData("mode","hourly")
            .Build();

        var trigger = TriggerBuilder.Create()
            .WithIdentity("hourlyTrigger", "group1")
            .WithSchedule(CronScheduleBuilder.CronSchedule("0 0 1/1 ? * *")
            .Build();

        _scheduler.ScheduleJob(jobDetail, trigger);
    }

    private void ScheduleDailyChangesJob()
    {
        var jobDetail = JobBuilder.Create<SimpleJob>()
            .WithIdentity("dailyJob", "group1")
            .UsingJobData("mode", "daily")
            .Build();

        var trigger = TriggerBuilder.Create()
            .WithIdentity("dailyTrigger", "group1")
            .WithSchedule(CronScheduleBuilder.CronSchedule("0 0 0 1/1 * ?"))
            .Build();

        _scheduler.ScheduleJob(jobDetail, trigger);
    }
}

谁能帮我实现这个目标?

谢谢

【问题讨论】:

    标签: c#-4.0 quartz-scheduler quartz.net


    【解决方案1】:

    您的代码似乎将启用新触发器,但不会删除旧触发器。以下代码是从http://www.quartz-scheduler.org/documentation/quartz-2.x/cookbook/UpdateTrigger.html获取的更改触发器的示例

    // retrieve the trigger
    Trigger oldTrigger = sched.getTrigger(triggerKey("oldTrigger", "group1");
    
    // obtain a builder that would produce the trigger
    TriggerBuilder tb = oldTrigger.getTriggerBuilder();
    
    // update the schedule associated with the builder, and build the new trigger
    // (other builder methods could be called, to change the trigger in any desired way)
    Trigger newTrigger = tb.withSchedule(simpleSchedule()
        .withIntervalInSeconds(10)
        .withRepeatCount(10)
        .build();
    
    sched.rescheduleJob(oldTrigger.getKey(), newTrigger);
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多