DClick

Agendamento de tarefas com Spring e Quartz


Twitter!

O Spring Framework pode agendar tarefas com facilidade quando integrado com o Quartz ou JDK Timer. Como não achei muitos artigos na web, resolvi fazer este post com alguns exemplos utilizando o Quartz Job Scheduler.


Para definirmos o agendamento, devemos configurar o applicationContext.xml do Spring.

Primeiramente vamos criar o Session Bean referenciando a classe que possui o método a ser executado:

<bean id="tarefaExemplo" class="br.com.dclick.blog.Tarefa"/>

Em seguida, utilizamos a classe MethodInvokingJobDetailFactoryBean para definir qual bean possui a tarefa e qual método desejamos executar, criando assim um detalhe de tarefa:

<bean id="detalheTarefa" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="tarefaExemplo"/>
<property name="targetMethod" value="executeJob"/>
</bean>

Nota: Os entity beans gerenciados pelo Quartz implementam por padrão a interface Stateless. Sendo assim, se este bean possuir duas ou mais tarefas, pode ocorrer a execução de uma nova tarefa antes da primeira ser finalizada. Para controlar isto, devemos alterar esta implementação para Stateful adicionando este parâmetro na definição acima:

<property name="concurrent" value="false" />

Existem duas maneiras para uma tarefa ser executada:
Simple trigger – Um agendador de tarefas simples, que será executado no intervalo de tempo definido em milisegundos (repeatInterval), possuindo um tempo de execução inicial (startDelay).

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="detalheTarefa" />
<property name="startDelay" value="10000" />
<property name="repeatInterval" value="90000" />
</bean>

Cron trigger – A tarefa pode ser executada em inúmeras configurações como por exemplo a última sexta-feira de setembro de 2008 às 18:32. Para informações detalhadas sobre os parâmetros do cron, acesse a API do Quartz. Neste exemplo executamos a tarefa todo dia as 17 horas:

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="detalheTarefa" />
<property name="cronExpression" value="0 0 17 * * ?" />
</bean>

E para finalizar as configurações, definimos o SchedulerFactoryBean com a lista dos detalhes de tarefa que devem ser executados:

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
<ref bean="cronTrigger" />
</list>
</property>
</bean>

Sua classe deve se parecer com esta:

JAVA:
  1. package br.com.dclick.blog;
  2.  
  3. public class Tarefa {
  4.  
  5. public void executeJob() {
  6. //tarefa a ser executada
  7. }
  8.  
  9. }

O site do Spring contém um tutorial demonstrando como agendar tarefas utilizando Quartz ou JDK Timer. Para maiores informações, acesse os docs do Spring.

[]s

Compartilhe:

  • RSS
  • Twitter
  • del.icio.us
  • Facebook
  • MySpace
  • LinkedIn
  • Google Bookmarks
Por Bruno Fuster em 20/August/2008 | Comentar | Trackback


No Translations

2 comentários para “Agendamento de tarefas com Spring e Quartz”


Bem legal e tranquila a configuração. Valeu!


Show! Valeu pela dica cara!

Adicionar comentário

(requerido)
(requerido, não será publicado)