Diferencia entre revisiones de «Quartz Con Spring»

De Dos Ideas.
Saltar a: navegación, buscar
(Definir el SchedulerFactoryBean)
(Crear la tarea y el trigger)
Línea 11: Línea 11:
 
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="unOjectoDeNegocio" />
 
     <property name="targetObject" ref="unOjectoDeNegocio" />
Línea 16: Línea 17:
 
     <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 27:
  
 
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.

Revisión del 18:24 27 ago 2008

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="unOjectoDeNegocio" />
   <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="cronTriggerActualizacion" />
     </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