2014-02-27 41 views
2

是否可以通過配置文件中保存的屬性(quartz.properties或app.config/web.config)來配置Quartz,還有一些可以通過StdSchedulerFactory構造函數?通過配置文件和構造函數的混合配置Quartz.NET

我想通過構造函數傳遞AdoJobStore連接字符串,因爲它是動態的,取決於環境,但其餘設置是靜態的,所以最好放在配置文件中。

我試過通過構造函數只傳遞quartz.dataSource.myDS.connectionString屬性,同時在工作目錄中的quartz.config中有其餘的屬性。但是,我得到的錯誤:

Provider not specified for DataSource: myDS 

所以我想這意味着,如果你使用的是接受的NameValueCollection構造函數,那麼它不打擾檢查配置文件(S)。

我知道quartz.config文件是在正確的地方,因爲如果我把ConnectionString的在那裏,並使用默認的構造函數,這一切工作

回答

2

最後,他們都只是命名值對。

您可以將它們中的「大部分」放在.xml文件中,然後通過代碼「添加」您想要的。

或者讓他們都在代碼中。

查看UnitTests的源代碼,你會看得很清楚。

事情是這樣的:

NameValueCollection config = (NameValueCollection)ConfigurationManager.GetSection("quartz"); 

    config.Add("MyCodedUpKey", "MyCodedUpValue"); 

如果在配置文件中要override..apply一些簡單的名稱值對的「衝突」(「鑰匙」「更新現有密鑰「邏輯」

Check if Key Exists in NameValueCollection

+0

謝謝,我已經和實施這樣的事情(雖然我的確注意到,但未通過ConfigurationManager中返回的NameValueCollection中是隻讀的,所以你必須創建一個新的集合,初始化用這個只讀一個,然後我一個dd動態值 –

+0

因此,要確認我的問題的答案是StdSchedulerFactory不會自動合併它在quartz.config文件中找到的屬性以及在構造函數中傳遞的屬性 - 您必須手動合併它們並將它們全部傳遞給構造函數:-) –

+0

不,我不這麼認爲。你必須手動干預。在碰撞的情況下,這是有道理的。如果他們將其編碼爲「配置獲勝」,則會有人抱怨。如果他們將其編碼爲「代碼贏」,有人會抱怨。 – granadaCoder

相關問題