Agendamento de Tarefas no Spring

Olá Senhores,

Outro dia me deparei com um problema, precisava que minha aplicação enviasse um email para o administrador de tempos em tempos sem interferência de qualquer evento.

Pois bem, foi quando eu conheci o Quartz, como ele o Spring Framework pode agendar tarefas com facilidade.

Para definir um agendamento, todo o trabalho é praticamente feio na configuração do applicationContext.xml do Spring.

Cria-se uma Session Bean que contém o método que será executado.

<bean id=”emailAction”

scope=”prototype” c

lass=”br.acoes.EmailAction”>

Em seguida, utiliza-se a classe MethodInvokingJobDetailFactoryBean para definir qual dos beans possui a tarefa e quais de seus métodos será executado:

<bean id=”quartzEmail” class=”org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean”>

<property name=”targetObject” ref=”emailAction”/>

<property name=”targetMethod” value=”enviar”/>

</bean>


Deve ser criado um temporizador para que o Quarzt saiba de quanto em quanto tempo ele será acionado, existem duas formas para se definir isso:

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=”quartzEmail” />

<property name=”startDelay” value=”1″ />

<property name=”repeatInterval” value=”9000″ />

</bean>

Cron trigger – A tarefa pode ser executada em inúmeras configurações como por exemplo toda quinta as 19:00.  Para detalhes dessa configuração visite o site oficial.

<bean id=”cronTrigger” class=”org.springframework.scheduling.quartz.CronTriggerBean”>

<property name=”jobDetail” ref=”quartzEmail” />

<property name=”cronExpression” value=”0 0 21* * ?” />

</bean>

O último passo é definir 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=”cronTrigger” />

</list>

</property>

</bean>

Com essas configurações, o método envia() da classe EmailAction será executado todo dia as 21 horas.

Abração

Enjoy!