2014-12-22 89 views
0

我目前有多個Quartz輪詢器檢查數據庫中的多個標誌,並在標誌爲真時觸發服務,並且我還有一個spring批處理項目讀取文件,然後調用服務進行更新相應的信息。春季批次:只爲消防服務

我想知道的是,如果有可能讓spring批處理應用程序僅在5分鐘內調用一個服務(不檢查任何信息,只需調用將處理所有業務邏輯的服務),以便我可以刪除來自我的應用程序的Quartz作業我所有的工作都在一個地方(春季批量項目)?

如果是這樣可以指出我如何做到這一點的正確方向,因爲我無法在網上找到任何東西,只是建立一個春季批處理作業,只是爲了啓動服務?

+0

我不認爲Spring Batch的可以自動給它,你需要每5分鐘後觸發批量,或者通過一些程序器或簡單的無限與線程睡眠循環5分鐘 – Panther

+0

我可以在Spring Batch應用程序上設置一個Quartz作業,我可以每5分鐘觸發一次。我的問題的確是將這個Quarts工作僅僅用於個人服務...你是否總是必須在春季批量中有讀者,處理器和編寫者? –

+0

你可以直接調用Quartz job中的服務,你不需要spring批處理或者任何讀寫器。 – Panther

回答

0

您可以簡單地調度Quartz作業並從您的調度類的executeInternal方法調用您的服務。您將無法直接在schedular類中自動裝載您的服務,因此您需要使用jobDataas Map進行設置。

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 

    <property name="triggers"> 
     <list> 
      <bean id="cronTriggerCache" 
       class="org.springframework.scheduling.quartz.CronTriggerBean"> 
       <property name="jobDetail" ref="exampleJob" /> 
       <property name="cronExpression" value="your cron expression" /> 
      </bean> 
</list> 
</bean>  
<bean name="exampleJob"  class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> 
<property name="jobClass" value="example.ExampleJob"/> 
<property name="jobDataAsMap"> 
    <map> 
     <entry key="myService" ref="myService"/> 
    </map> 
</property> 
</bean> 

package example; 

public class ExampleJob extends QuartzJobBean { 

private myService myService; 

/** 
* have getter setter for you service 
* 
*/ 


protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException { 
    // do the actual work 
    //call your service method here 
} 

}