2013-02-28 65 views
2
<bean name="MyJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> 
    <property name="jobClass" value="com.package.scheduler.MyJob"/> 
     <property name="jobDataAsMap"> 
      <map> 
       <entry key="numArr" value="10,20,30"/> 
      </map> 
     </property> 
</bean> 

我有一個石英工作定義,它在凌晨1:30運行。問題是這個數組定義不起作用如何強制石英調度程序中的bean在啓動時初始化?

<entry key="numArr" value="10,20,30"/> 

我們不得不使用list。由於bean在石英工作開始前不會被初始化,並且不太可能在上午1點30分進行編碼,所以我們無法在本地捕獲到這個錯誤。現在唯一的辦法是改變石英工作的運行時間,迫使它發生。當我們在本地開發中運行時,我們希望強制這些bean在啓動時被初始化。有沒有辦法做到這一點?

回答

0

如果可能的話,我會從Quartz作業中解耦你的bean。然後,您可以在彈簧配置中單獨初始化您的bean,並且不需要知道Quartz。然後,我將使用彈簧MethodInvokingJobDetailFactoryBean在您的分離對象上調用方法。

例如一些與此類似:

<bean id="myBean class="..."> 
    <property name="numArr" value="10,20,30"/> 
</bean> 

<bean id="myJob" 
     class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="targetObject" ref="myBean" /> 
    <property name="targetMethod" value="doSomething" /> 
</bean> 

<bean id="staleTraderRatesTrigger" 
     class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="myJob" /> 
    <property name="cronExpression" value="0 30 1 * * ?" /> 
</bean>