我可以为每个应用程序创建多少个调度程序?

时间:2016-09-02 07:21:59

标签: quartz.net

似乎StdSchedulerFactory返回一个名字在config:

中定义的单例
<add key="quartz.scheduler.instanceName" value="MyQuartzScheduler" />

由于石英配置部分由键值对组成,因此使用工厂实例化调度程序会将可用调度程序的数量限制为一个。

1 个答案:

答案 0 :(得分:2)

AFIAK,您可以在任何应用程序中创建任意数量的调度程序,但是您不能使用默认的quartz配置方法,因为它只需要一个调度程序属性集合(查看StdSchedulerFactory {{3} }和implementation博客,如果有趣的话):

  

默认情况下,在Quartz.Net中,StdSchedulerFactory负责配置调度程序。启动Quartz.Net调度程序时,工厂将尝试通过在不同位置查找配置信息来自动配置调度程序:

     
      
  • 托管应用程序的配置文件
  •   
  • 在环境变量中指定的文件
  •   
  • quartz.config文件
  •   
  • 嵌入式配置文件
  •   

所以你可以做的不是使用自动调度程序配置,而是使用 他自己创建一个单独的属性集合,并将它们传递给调度程序创建构造函数:

public StdSchedulerFactory(NameValueCollection props);
  • 使用代码方法:

    NameValueCollection scheduler1Properties = new NameValueCollection();     
    properties["quartz.scheduler.instanceName"] = "SingleThreadScheduler"; 
    properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
    properties["quartz.threadPool.threadCount"] = "1";
    ...
    var factory = new StdSchedulerFactory(scheduler1Properties);
    
  • 或者您可以创建单独的石英配置并直接使用quartz this类来阅读

    /// <summary>
    /// Reads the properties from file system.
    /// </summary>
    /// <param name="fileName">The file name to read resources from.</param>
    /// <returns></returns>
    public static PropertiesParser ReadFromFileResource(string fileName)
    

    并获得收藏:

    /// <summary>
    /// Gets the underlying properties.
    /// </summary>
    /// <value>The underlying properties.</value>
    public virtual NameValueCollection UnderlyingProperties
    {
        get { return props; }
    }
    

    // PropertiesParser类直接用于PropertiesParser配置阅读实现。