Tomcat 7, Quartz 2 e Spring 3: come integrarli
Questo è un semplice esempio di come integrare le librerie di Quartz (alla versione 2.2.1) con Tomcat 7 utilizzando Spring 3.1.2.RELEASE come container. Rispetto all’esempio precedente non è il listener di Quartz impostato nel web.xml ad attivare lo scheduler, ma l’ApplicationContext di Spring.
Le dipendenze vengono gestite da Maven, e sono queste:
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <!-- Quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>javax.transaction</groupId> <artifactId>jta</artifactId> <version>1.1</version> </dependency> <!-- FINE Quartz --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.1.2.RELEASE</version> </dependency> </dependencies> |
La configurazione di Spring
La configurazione di Spring prevede:
- Modifica al file web.xml
- Creazione dei file applicationContext.xml
Modifica al file web.xml
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> |
Creazione del file applicationContext.xml
Nel file di configurazione di Spring vengono definiti tutti i bean relativi a Quartz, che servono per la definizione dei Job, dei Trigger e dello Scheduler
<bean id="emptyJob" class="it.nicola.esempi.cron.EmptyJob" /> <bean id="emptyJobBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="emptyJob" /> <property name="targetMethod" value="execute" /> </bean> <bean id="emptyJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="emptyJobBean" /> <property name="cronExpression" value="0 0/1 * * * ?"/> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="emptyJobBean" /> </list> </property> <property name="triggers"> <list> <ref bean="emptyJobTrigger" /> </list> </property> </bean> |
Anche in questo caso è presente un solo job, la cui implementazione è nella classe it.nicola.esempi.cron.EmptyJob, ed un trigger che esegue il job ogni minuto.
Implementazione del Job
Questa volta non è necessario che la classe EmptyJob implementi l’interfaccia Job di Quartz:
public class EmptyJob { public void execute() { System.out.println("Sono un Job e sono partito."); } } |
La struttura finale del progetto dovrebbe essere questa:

L’esempio
E’ possibile scaricare un questo esempio:
Per compilare:
mvn clean compile |
Per creare il war:
mvn package |
Per lanciare l’esempio:
mvn tomcat7:run |
Leave a Reply