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.
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!