2017-06-18 29 views
0

我有一個石英計劃流程,只能在初始流程完成後運行。初始流程設置數據,這些數據必須存在於石英計劃過程才能成功的文件中。然而,石英過程開始,最初的過程從不開始。我只想要初始運行一次,所以我不希望它在石英流中運行。騾 - 如何安排一個應該只在Quartz計劃流程前運行一次的流程

 <!-- Needs to run only once --> 
     <flow name="InitialJob"> 
     <component .... 
    </flow> 

    <!-- Depends on InitialJob --> 
    <flow name="ScheduledProcess"> 
      <quartz:inbound-endpoint responseTimeout="10000" doc:name="Schd" 
      cronExpression="0 */5 * * * ?" jobName="doIt" 
      repeatInterval="0"> 
      <quartz:event-generator-job/> 
     </quartz:inbound-endpoint> 

     <!-- I don't want to put InitialJob here, 
      I only want it to run once 
       --> 
     <flow-ref name="PerformJob"/> 
    </flow> 

有沒有辦法做到這一點?我如何安排流量來實現我的目標?

+0

我回答了這個問題,但是您能否對設置的數據給出更高的精度? 看起來您的應用程序將嘗試在啓動時自行進行自我配置。即使你所描述的問題可以解決,也可能有其他方式來處理你的「在某些文件中的設置數據」問題;) –

回答

0

您可以創建兩個流程,一個將定期觸發,但在啓動時被禁用,一個將設置您的數據並激活週期性流程。例如:

<!-- Will run periodically once started --> 
    <flow name="PeriodicJob" initialState="stopped"> 
     <quartz:inbound-endpoint jobName="PeriodicJob" cronExpression="* * * * * ?" repeatInterval="0" responseTimeout="10000" doc:name="Quartz"> 
      <quartz:event-generator-job/> 
     </quartz:inbound-endpoint> 
     <flow-ref name="PerformJob"/> 
    </flow> 

    <!-- Will run once on start-up and activate PeriodJob --> 
    <flow name="InitialJobRunOnce"> 
     <quartz:inbound-endpoint jobName="InitialJobRunOnce" repeatInterval="0" repeatCount="0" startDelay="0" responseTimeout="10000" doc:name="Quartz"> 
      <quartz:event-generator-job/> 
     </quartz:inbound-endpoint> 
     <expression-component doc:name="Activate period job"><![CDATA[app.registry.PeriodicJob.start();]]></expression-component> 
    </flow> 

您的初始流程將在啓動時運行一次,但此「運行一次流程」方法有一些限制。如果您的應用程序重新啓動,初始流程將再次運行 - 儘管通過向初始流程添加一些邏輯可以以某種方式緩解這種情況。

+0

謝謝你的迴應。這是我在Mule網站上找到一篇文章的完美解決方案後所做的工作! – BreenDeen

0
In your initial flow try to start the quartz flow like this`<expression-component> 
    app.registry.yourflowName.start(); 
    </expression-component>` 

Then in after quartz flow is finished try to stop the initial flow with below script:`<expression-component> 
    app.registry.yourflowName.stop(); 
    </expression-component>` 

謝謝!

+0

非常感謝,會嘗試。 – BreenDeen

+0

你怎麼知道初始流程何時完成?另外,一旦石英流動開始並且初始流動停止一次,這也意味着一旦石英調度器週期完成,每次都試圖停止流動。這與在調度程序中運行初始作業相似 – BreenDeen

+0

如果條件滿足,可以將其包裝起來。 –