Quartz Con Spring

De Dos Ideas.
Saltar a: navegación, buscar

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.

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>

Ver también