【问题标题】:Configure Quartz.NET through a mixture of config file and constructor通过配置文件和构造函数的混合配置 Quartz.NET
【发布时间】:2014-02-27 19:44:41
【问题描述】:

是否可以通过配置文件中的混合属性(quartz.properties 或 app.config / web.config)以及一些通过 StdSchedulerFactory 构造函数来配置 Quartz?

我想通过构造函数传递 AdoJobStore 连接字符串,因为它是动态的,取决于环境,但其余设置是静态的,所以最好放在配置文件中。

我尝试通过构造函数仅传入quartz.dataSource.myDS.connectionString 属性,同时将其余属性放在工作目录中的quartz.config 中。但是,我得到了错误:

Provider not specified for DataSource: myDS

所以我猜这意味着如果您使用接受 NameValueCollection 的构造函数,那么它就不会检查配置文件。

我知道quartz.config 文件在正确的位置,因为如果我将连接字符串放在那里并使用默认构造函数,一切正常

【问题讨论】:

    标签: quartz-scheduler quartz.net


    【解决方案1】:

    最后,它们都是简单的命名值对。

    您可以将其中的“大部分”放在 .xml 文件中...然后通过代码“添加”您想要的那些。

    或者将它们全部放在代码中。

    查看源代码的单元测试,您会很清楚地看到这一点。

    类似这样的:

        NameValueCollection config = (NameValueCollection)ConfigurationManager.GetSection("quartz");
    
        config.Add("MyCodedUpKey", "MyCodedUpValue");
    

    如果你有一个“冲突”(配置文件中的一个“键”要覆盖......应用一些简单的名称-值对“更新现有键”逻辑”

    Check if Key Exists in NameValueCollection

    【讨论】:

    • 谢谢,我已经实现了类似的东西(虽然我注意到从 ConfigurationManager 返回的 NameValueCollection 是只读的,所以你必须创建一个新的集合,用这个读取初始化只有一个,然后我添加动态值
    • 因此,要确认我的问题的答案是 StdSchedulerFactory 不会自动合并它在quartz.config 文件中找到的属性和在构造函数中传递的属性 - 您必须手动合并它们并传递它们全部在构造函数中:-)
    • 不,我不这么认为。您必须手动干预。这有点道理……在碰撞的情况下。如果他们将其编码为“配置获胜”,那么有人会抱怨这一点。如果他们将其编码为“代码获胜”,就会有人抱怨。
    • 嗯,这是一个公平的观点。但就我个人而言,我很乐意接受碰撞中的异常,以获得额外的便利(在我的特定情况下)
    • 如果他们抛出异常,有人会抱怨(我认为):) ........有时不能以输赢。这是其中一种情况…………在 Sql Server 世界中:connect.microsoft.com/SQLServer/feedback/details/382007/…
    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多