2014-02-11 61 views
1

我有一個quartz_jobs.xml文件,其中已經定義了作業。 我可以加載quartz_jobs.xml文件配置和作業開始射擊。又名,從quartz_jobs.xml文件中「讀取」工作正常工作。在保留「quartz_jobs.xml」文件的代碼中創建作業

但是,如果我手動添加作業到IScheduler,這個手動添加的作業將開始運行......(與quartz_jobs.xml文件中定義的作業一起).... 但是作業是不〜寫入xml。

有沒有辦法將作業添加到IScheduler並將其寫回到quartz_jobs.xml文件?請注意,當我將完全相同的代碼連接到一個AdoStore,並且調用IScheduler.Start()時,這些作業會被添加到數據庫表(也就是說,它們會持續存在)。 但是,連接到針對Xml運行的RamStore的相同代碼不會將作業「保存」到quartz_jobs.xml文件。

謝謝。

這是我的quartz.config(不是作業)文件。

<quartz> 

    <add key="quartz.plugin.jobInitializer.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin" /> 
    <add key="quartz.scheduler.instanceName" value="DefaultQuartzScheduler" /> 
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" /> 
    <add key="quartz.threadPool.threadCount" value="10" /> 
    <add key="quartz.threadPool.threadPriority" value="2" /> 
    <add key="quartz.jobStore.misfireThreshold" value="60000" /> 
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" /> 
    <add key="quartz.plugin.jobInitializer.fileNames" value="quartz_jobs.xml" /> 
    <add key="quartz.plugin.jobInitializer.failOnFileNotFound" value="true" /> 
    <add key="quartz.plugin.jobInitializer.scanInterval" value="120" /> 


</quartz> 

http://quartznet.sourceforge.net/apidoc/2.0/html/html/2909678f-44c6-6e13-afa5-c50e7b5ee435.htm

XMLSchedulingDataProcessorPlugin類Quartz.NET API文檔 這個插件加載XML文件(一個或多個)來添加作業和作爲所述調度器被初始化觸發器安排它們,並且可以週期性地任選掃描文件改變。

回答

1

我不認爲你可以。

XMLSchedulingDataProcessor沒有任何方法將您的作業序列化迴文件並QuartzXmlConfiguration20似乎只有只讀集合。

我試過做一些實驗。

顯然,你可以管理到裝載的全過程和處理XML文件:

ITypeLoadHelper loadHelper = new SimpleTypeLoadHelper(); 
loadHelper.Initialize(); 
XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(loadHelper); 
processor.OverWriteExistingData = true; 
processor.ProcessFileAndScheduleJobs("my_jobs.xml", Scheduler); 

(所以你不必使用任何配置您的配置文件) 但同樣,也沒有附加額外元素的方式。

另一種方式可能是反序列化XML文件,並試圖操縱它:

string xml = string.Empty; 

using (var xmlJobFile = new System.IO.StreamReader("my_jobs.xml")) 
{ 
    xml = xmlJobFile.ReadToEnd(); 
} 

XmlSerializer xs = new XmlSerializer(typeof(QuartzXmlConfiguration20)); 
QuartzXmlConfiguration20 data = (QuartzXmlConfiguration20)xs.Deserialize(new StringReader(xml)); 

if (data == null) 
{ 
    throw new SchedulerConfigException("Job definition data from XML was null after deserialization"); 
} 

但它變得太複雜了。

我認爲最好的選擇是使用AdoJobStore

+0

這就是我的想法。只需要一些確認。感謝您的努力。 – granadaCoder

+0

沒問題。乾杯。 – LeftyX