Agendamento de tarefas com Spring e Quartz
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:
-
package br.com.dclick.blog;
-
-
public class Tarefa {
-
-
public void executeJob() {
-
//tarefa a ser executada
-
}
-
-
}
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
2 comentários para “Agendamento de tarefas com Spring e Quartz”
Bem legal e tranquila a configuração. Valeu!
Show! Valeu pela dica cara!

