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>
È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top