ciò che corre esattamente il lavoro del cron di quarzo in primavera?
-
13-09-2019 - |
Domanda
persone buone. Sto cercando di utilizzare al quarzo con la primavera in modo molto semplice progetto gestito da maven.So nel modulo in cui la classe lavoro mycron è ho incluso una classe principale Java ad essa solo per vedere l'output del lavoro del testo e nuova data. ecco la mia config primavera:
<!--Scheduling-->
<!--Job-->
<bean id="projUpdater" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.myproject.utilscheduling.quartz.ProjUpdaterCronImpl" />
</bean>
<!---End of Jobs-->
<!--Triggers-->
<bean id="regularUpdateTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="projUpdater"/>
<property name="cronExpression" value="30 1 * * * ?"/>
</bean>
<!--End ofTriggers-->
<!--Scheduler Factory-->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="regularUpdateTrigger"/>
</list>
</property>
</bean>
<!--End of Scheduler Factory-->
<!--End of Scheduling-->
e qui è la categoria di lavoro
public class ProjUpdaterCronImpl extends QuartzJobBean {
public ProjUpdaterCronImpl() {
}
protected void executeInternal (JobExecutionContext ctx) throws JobExecutionException {
System.out.println("[JOB] " + new Date() + "hello");
}
}
Questa è la classe principale
public class NewMain {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("starting job");
}
}
così nella mia comprensione verrà avviato il lavoro dopo 1mn30s e pubblicato sul console.I'm wrong.i affrontato coppie o gli errori che ho risolto così posso tranquillamente supporre che non v'è alcun errore nel file di configurazione in primavera dal momento che ci è nessuno quando si costruisce e running.So cosa ho fatto di sbagliato o che cosa ho dimenticato di fare?
La seconda preoccupazione dal momento che mi sto costringendo a fare la fine test driven come faccio forse testare una classe il lavoro cron? Grazie per la lettura
Soluzione
Il tuo espressione cron
<property name="cronExpression" value="30 1 * * * ?"/>
in realtà configura il grilletto per sparare una volta ogni ora a 1 minuto e 30 secondi dopo l'ora.
suggerimento di Zoidberg per utilizzare MethodInvokingJobDetailFactoryBean
permette di codificare il vostro lavoro cron come POJO, rendendo più semplice per eseguire il test.
Altri suggerimenti
Prova questo per il bean di lavoro.
<bean id="projUpdater" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="registeredObject" />
<property name="targetMethod" value="methodNameInObject" />
</bean>
Dove il vostro registeredObject è un fagiolo registrati nella configurazione primavera da qualche parte. E il metodo è un metodo che esiste in tale oggetto.