【问题标题】:How to check for existing Quartz.net schedulers?如何检查现有的 Quartz.net 调度程序?
【发布时间】:2013-04-08 20:08:47
【问题描述】:

最近将我的嵌入式 Quartz.net 调度程序升级到 2.x,此时我不得不give up on giving my Zero Thread Schedulers unique names,现在我遇到一个问题,即(很少)尝试创建 ZT 调度程序实例的对象抛出异常,因为另一个对象已经实例化了一个 ZT 调度程序实例,并且由于我所有的 ZT 调度程序现在都有默认的“QuartzScheduler”名称,这会引发异常......

我尝试在调用MySchedFactory = new StdSchedulerFactory(properties) 后使用MySchedFactory.AllSchedulers.Count 检查调度程序计数,但StdSchedulerFactory 在实例化后立即创建ZT 调度程序实例,而不是在调用GetScheduler() 方法时创建,所以这是一个死胡同...

在实例化 StdSchedulerFactory 之前,我找不到任何其他检查现有调度程序的方法,并且正如我已经提到的,一旦实例化,它就会创建 ZT 调度程序的实例,所以我最终使用了一个 while 循环在我的 catch 块中,这只是一个可怕的解决方案,所以我希望有人知道检查现有 ZT 调度程序的更好方法......

        try
        {                
            //setting properties
            MySchedFactory = new StdSchedulerFactory(properties);
            BaseScheduler = schedFactory.GetScheduler();
        }
        catch (Exception ex)
        {
            var exMsg = ex.InnerException == null ?
                    ex.Message :
                    ex.Message + Environment.NewLine + ex.InnerException.Message;
            while (exMsg.Contains("Scheduler with name 'QuartzScheduler' already exists"))
            {
                try
                {
                    MySchedFactory = new StdSchedulerFactory(properties);
                    BaseScheduler = schedFactory.GetScheduler();
                }
                catch (Exception vex)
                {
                    exMsg = vex.InnerException == null ?
                        vex.Message :
                        vex.Message + Environment.NewLine + vex.InnerException.Message;
                }                    
            }
        }

有什么想法吗?

【问题讨论】:

    标签: quartz.net quartz.net-2.0


    【解决方案1】:

    将调度程序工厂的引用保留为单例而不是创建一个新的引用如何?

    【讨论】:

    • 由于您无法将任何内容传递给 Execute 方法,因此如何实现 IJob 接口的石英作业还需要安排其他应该获得此参考的作业?
    • MySchedulerFactorySingleton.GetInstance() 其中 MySchedulerFatorySingleton 是一个公共静态类。
    【解决方案2】:

    Quartz.net 调度程序必须是单例的。您可以阅读 here 的内容。

    【讨论】:

    • 如果是这种情况,实现 IJob 接口的作业应该如何安排其他作业?如您所知,您不能将任何内容传递给 Execute 方法...
    • 可以使用依赖注入asmiki.wordpress.com/2011/06/02/…
    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多