Diferencia entre revisiones de «Quartz Con Spring»
(→Definir el SchedulerFactoryBean) |
|||
(No se muestra una edición intermedia de otro usuario) | |||
Línea 14: | Línea 14: | ||
<code xml> | <code xml> | ||
<bean id="unaTarea" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> | <bean id="unaTarea" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> | ||
− | <property name="targetObject" ref=" | + | <property name="targetObject" ref="unObjetoDeNegocio" /> |
<property name="targetMethod" value="metodoDeNegocio" /> | <property name="targetMethod" value="metodoDeNegocio" /> | ||
<property name="concurrent" value="false" /> | <property name="concurrent" value="false" /> | ||
Línea 54: | Línea 54: | ||
<list> | <list> | ||
<ref bean="simpleTrigger" /> | <ref bean="simpleTrigger" /> | ||
− | <ref bean=" | + | <ref bean="cronTrigger" /> |
</list> | </list> | ||
</property> | </property> |
Revisión actual del 16:57 28 feb 2011
Spring Framework provee soporte para crear tareas en Quartz de forma declarativa. Así, a través de la declaración de beans, podremos ejecutar periódicamente métodos de cualquier de los beans declarados en Spring.
Contenido
Crear la tarea y el trigger
Deberemos declarar en Spring 3 beans: la tarea propiamente dicha a ejecutar, el trigger y el scheduler.
En Spring tenemos 2 tipos de trigger.
- SimpleTriggerBean: se utiliza para que el job corra cada n cantidad de milisegundos.
- CronTriggerBean: se usa para correr un job en un horario fijo.
Crear la tarea
Crear la tarea es declarar un bean que referencia al objeto y método que queremos que se ejecute. En el siguiente ejemplo, declaramos un bean "unaTarea", que referencia al método "metodoDeNegocio()" del bean "unObjetoDeNegocio".
<bean id="unaTarea" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="unObjetoDeNegocio" /> <property name="targetMethod" value="metodoDeNegocio" /> <property name="concurrent" value="false" /> </bean>
Como vemos, el MethodInvokingJobDetailfactoryBean tiene la información del método que se ejecutara:
- targetObject: contiene la referencia a la clase que contiene el método.
- targetMethod: el nombre del método.
- concurrent: false, la tarea no se ejecutara en forma concurrente .
SimpleTrigerBean
El simpleTrigger lo configuramos para que llame a la tarea que definimos y se ejecute cada 60000 milisegundos.
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="unaTarea" /> <property name="repeatInterval" value="60000" /> </bean>
CronTriggerBean
Nuestro CronTrigger también tiene definida la misma tarea y tiene seteada la cronExpresion para que se ejecute todos los días a la 1:30 AM.
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="unaTarea" /> <property name="cronExpression" value="0 30 1 * * ?" /> </bean>
La CronExpression tiene su propia nomenclatura para las fechas de ejecución les recomiendo que lean la documentacion para entenderla mejor.
Definir el SchedulerFactoryBean
El último paso es definir nuestro SchedulerFactoryBean con los trigger que se ejecutaran.
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="simpleTrigger" /> <ref bean="cronTrigger" /> </list> </property> </bean>
Las tareas que definimos quedaran activadas cuando el contexto de Spring se levante.
Configurando una Aplicacion Web
Si tenemos una Aplicacion Web y queremos que se empiecen a ejecutar inmediatamente cuando se deploye, deberemos levantar el contexto de Spring al momento que se prepare la aplicación web. Para esto se puede utilizar el listener ya provisto para Spring para levantar el contexto:
<web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:archivoDeSpring1.xml, classpath:archivoDeSpring2.xml </param-value> </context-param>
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
</web-app>