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:

Tomcat 7, Quartz 2 e Spring 3: struttura del progetto
Tomcat 7, Quartz 2 e Spring 3: struttura del progetto

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

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>