Come eseguire il metodo usando i bean di primavera
-
05-07-2019 - |
Domanda
Ho bisogno di trovare il metodo findItemByPIdEndDate () della classe MngtImpl per essere invocato ogni 5000 ms, ma sembra che non stia accadendo nulla. Mi sto perdendo qualcosa?
<bean id="findItemByPIdEndDate" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="MngtImpl"/>
<property name="targetMethod" value="findItemByPIdEndDate"/>
<property name="repeatInterval" value="50000"/>
</bean>
@matt b Ne ho letto un po ', tutto è nuovo per me qui .. quindi sono venuto con questo .. e ancora non funziona, cosa mi sto perdendo questa volta?
<bean id="findItemByPIdEndDate" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="MngtImpl" />
<property name="targetMethod" value="findItemByPIdEndDate" />
</bean>
<bean id="compareDateTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="findItemByPIdEndDate" />
<property name="startDelay" value="0" />
<property name="repeatInterval" value="50000" />
</bean>
Soluzione
Per questa attività, il Capitolo 23 La pianificazione e il pool di thread sono i tuoi amici . Detto questo, ecco un breve riassunto.
Per prima cosa, definisci il tuo Lavoro
:
<bean id="findItemByPIdEndDate" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="MngtImpl"/>
<property name="targetMethod" value="findItemByPIdEndDate"/>
</bean>
Ora, è necessario pianificare il lavoro utilizzando un trigger e un SchedulerFactoryBean
. Per il trigger, suggerisco di usare un SimpleTriggerBean
nel tuo caso:
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<!-- see the example of method invoking job above -->
<property name="jobDetail" ref="findItemByPIdEndDate" />
<!-- 10 seconds -->
<property name="startDelay" value="10000" />
<!-- repeat every 50 seconds -->
<property name="repeatInterval" value="50000" />
</bean>
Per finalizzare tutto, imposta SchedulerFactoryBean
:
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
Altri suggerimenti
Per far funzionare il quarzo è necessario molto più impianto idraulico di quello. Dichiarare il MethodInvokingJobDetailFactoryBean
da solo non farà nulla.
Tuttavia, Quartz è eccessivo per questo, Java5 + può farlo da solo. Suggerisco di leggere su Spring ScheduledExecutorFactoryBean , che in combinazione con MethodInvokingRunnable , ti consente di invocare periodicamente il tuo metodo.
Quello che hai fatto finora è l'equivalente di un'istanza solo di MethodInvokingJobDetailFactoryBean () - essenzialmente tutto ciò che hai fatto è stato creato il Lavoro. Ora devi avere una configurazione per come è pianificato e cosa lo attiva.
Dai un'occhiata a la sezione in il manuale della primavera sul quarzo .