通过配置将日历添加到Quartz作业

时间:2018-05-25 11:31:58

标签: c# quartz-scheduler

我想阻止我的一些Quartz作业在假期上运行,the official Quartz page about triggers,我们可以阅读:

  

实现ICalendar接口的Quartz.NET Calendar对象可以在触发器存储在调度程序中时与触发器相关联。日历可用于从触发器的触发计划中排除时间块。例如,您可以创建一个触发器,在每个工作日上午9:30触发作业,但随后添加一个排除所有业务假期的日历。

我的触发器在配置文件中定义,例如:

@if(isset($result['Domains']['Domain'])) 
    @foreach($result['Domains']['Domain'] as $key => $value)
      @if($key == 'Name')
        <b>{{$value}}</b> - 
      @endif
      @if($key == "RRPText")
        <b>{{$value}}</b>
      @endif
    @endforeach
@endif
@if(isset($result['Domains']['Domain']['Prices']))
    @foreach($result['Domains']['Domain']['Prices'] as $key => $value)
      @if($key == "Registration")
        <b>{{$value}}</b>
      @endif 
    @endforeach
@endif

我可以在不改变C#代码的情况下阻止触发器在假期日历中触发日期吗? 如果没有,我是否至少可以在配置中保留触发器定义并在代码中添加日历并将其分配给特定的触发器?

所以,这个程序化的解决方案不是我想要的:programmatically create trigger and assign calendar

1 个答案:

答案 0 :(得分:1)

触发器XML配置允许您按名称配置日历:

<trigger>
  <simple>
    <calendar-name>myHolidayCalendar<calendar-name>
  </simple>
</trigger>

为此,必须在日程安排程序中注册假日日历:

var calendar = new HolidayCalendar();
calendar.addExcludedDate(DateTime.Today);
scheduler.addCalendar("myHolidayCalendar", calendar, false);