Introdução ao Quartz
Em projetos WEB, é comum surgir a necessidade de execução de tarefas periódicas e sem a interferência do usuário. Essas tarefas podem ser desde notificações por e-mail para usuários com contas expirando até processos mais complexos de inclusão, atualização ou exclusão de dados.
Uma ferramenta bastante difundida para executar esse trabalho é o Quartz, mantido pela Terracota, o qual consiste em uma ferramenta completa para agendamento de tarefas que pode ser associada a praticamente qualquer projeto Java EE ou Java SE.
Seu processo de configuração é relativamente simples, principalmente depois que o mesmo é feito pela primeira vez, pois nos projetos subsequentes os arquivos podem ser duplicados e os ajustes necessários são mínimos.
Para demonstrar a utilização do Quartz, será criado um projeto Dynamic Web Project em branco no Eclipse. Nele serão inseridas as bibliotecas necessárias, criados os arquivos de configuração e no final uma classe que implementará a interface org.quartz.Job.
Para configurar o projeto, serão necessárias as seguintes bibliotecas:
- commons-beanutils-1.7.0.jar
- commons-digester-1.8.jar
- commons-logging-1.1.jar
- jta.jar
- quartz-1.6.6.jar
E os seguintes arquivos de configuração:
- quartz-jobs.xml
- quartz.properties
Além de uma pequena modificação no arquivo web.xml
Ao final da configuração você deverá ter uma estrutura semelhante à imagem a seguir:
O primeiro passo é declarar o listener do quartz e o nome do arquivo de configurações no web.xml, conforme modelo a seguir:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>quartz</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class> </listener> <context-param> <param-name>config-file</param-name> <param-value>quartz.properties</param-value> </context-param> </web-app>
No web.xml ficou definido o quartz.properties como arquivo de configurações. O modelo abaixo poderá ser utilizado em praticamente qualquer projeto:
#=============================================================== #Configure Main Scheduler Properties #=============================================================== org.quartz.scheduler.instanceName = QuartzScheduler org.quartz.scheduler.instanceId = AUTO #=============================================================== #Configure ThreadPool #=============================================================== org.quartz.threadPool.threadCount = 5 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool #=============================================================== #Configure JobStore #=============================================================== org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore #=============================================================== #Configure Plugins #=============================================================== org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin org.quartz.plugin.jobInitializer.overWriteExistingJobs = true org.quartz.plugin.jobInitializer.failOnFileNotFound = false org.quartz.plugin.jobInitializer.scanInterval = 30 org.quartz.plugin.jobInitializer.validating=false org.quartz.plugin.jobInitializer.fileName=quartz-jobs.xml
No arquivo quartz.properties, definiu-se que o arquivo quartz-jobs.xml será o responsável pelas configurações das tarefas. Nesse arquivo, você irá criar os jobs que necessitar e também definir qual a periodicidade da sua execução. Essa última parte é configurada através de uma cron-expression. Declarar um job é relativamente simples, conforme você pode ver no arquivo quartz-jobs.xml desse projeto:
<?xml version="1.0" encoding="ISO-8859-1"?>
<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" overwrite-existing-jobs="true">
<job>
<job-detail>
<name>NomeDoJob</name>
<group>DEFAULT</group>
<description>Descricao</description>
<job-class>br.com.k2studio.quartz.job.SimpleJob</job-class>
</job-detail>
<trigger>
<cron>
<name>TriggerDoJob</name>
<group>DEFAULT</group>
<job-name>NomeDoJob</job-name>
<job-group>DEFAULT</job-group>
<cron-expression>0 0/1 5-23 ? * 2,3,4,5</cron-expression>
<!--
Essa cron será executada todos os minutos de segunda a quinta, das 5 às 23 horas.
Referência para cron-expression: http://en.wikipedia.org/wiki/CRON_expression
-->
</cron>
</trigger>
</job>
</quartz>
No job declarado, definiu-se que a classe SimpleJob.java seria a responsável pela execução da tarefa. Essa classe deve implementar a interface Job, como foi dito no inicio do post. Ao implementar essa interface, a classe irá conter o método execute, o qual será chamado cada vez que o job for solicitado.
Segue a implantação da classe SimpleJob.java:
package br.com.k2studio.quartz.job;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SimpleJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
System.out.println("Job executado com sucesso às " + df.format(new Date()));
}
}
Ao executar o projeto, o resultado no console será o seguinte:
Download do projeto: Download
Share on Facebook


Obrigada estava procurando exatamente HOWTO assim \o/
Ficou ótimo esse tutorial!