Diferencia entre revisiones de «Quartz Con Spring»
(→Definir el SchedulerFactoryBean) |
(→Definir el SchedulerFactoryBean) |
||
(No se muestran 3 ediciones intermedias de 3 usuarios) | |||
Línea 1: | Línea 1: | ||
+ | [[Category:Spring Framework]] | ||
[[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. | [[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. | ||
Línea 11: | Línea 12: | ||
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". | 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". | ||
+ | <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" /> | ||
</bean> | </bean> | ||
+ | </code> | ||
Como vemos, el MethodInvokingJobDetailfactoryBean tiene la información del método que se ejecutara: | Como vemos, el MethodInvokingJobDetailfactoryBean tiene la información del método que se ejecutara: | ||
Línea 25: | Línea 28: | ||
El simpleTrigger lo configuramos para que llame a la tarea que definimos y se ejecute cada 60000 milisegundos. | El simpleTrigger lo configuramos para que llame a la tarea que definimos y se ejecute cada 60000 milisegundos. | ||
− | + | <code xml> | |
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> | <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> | ||
<property name="jobDetail" ref="unaTarea" /> | <property name="jobDetail" ref="unaTarea" /> | ||
<property name="repeatInterval" value="60000" /> | <property name="repeatInterval" value="60000" /> | ||
</bean> | </bean> | ||
− | + | </code> | |
=== CronTriggerBean === | === 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. | 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. | ||
− | + | <code xml> | |
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> | <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> | ||
<property name="jobDetail" ref="unaTarea" /> | <property name="jobDetail" ref="unaTarea" /> | ||
<property name="cronExpression" value="0 30 1 * * ?" /> | <property name="cronExpression" value="0 30 1 * * ?" /> | ||
</bean> | </bean> | ||
− | + | </code> | |
La ''CronExpression'' tiene su propia nomenclatura para las fechas de ejecución les recomiendo que lean la documentacion para entenderla mejor. | La ''CronExpression'' tiene su propia nomenclatura para las fechas de ejecución les recomiendo que lean la documentacion para entenderla mejor. | ||
Línea 51: | 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>