Quartz ist ein Scheduler der es auf relativ einfache Weise ermöglicht, Aktionen zu bestimmten Zeitpunkten auszuführen. Wenn man Quartz in Tomcat einbindet, wird es automatisch gestartet und gestoppt. Außerdem zeige ich hier, wie man einen Scheduler erzeugt, den man dann in den Servlets / WebServices oder was auch immer verwenden kann um neue Jobs einzustellen.
web.xml
Hier wird dafür gesorgt, dass Quartz gestartet und gestoppt wird. Der erste Parameter gibt an, wo die config-Datei zu finden ist. In diesem Beispiel liegt sie im root des classpath.
<listener>
<listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>
<context-param>
<param-name>quartz:config-file</param-name>
<param-value>quartz.properties</param-value>
</context-param>
<context-param>
<param-name>quartz:shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>quartz:wait-on-shutdown</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>quartz:start-scheduler-on-load</param-name>
<param-value>true</param-value>
</context-param>
Scheduler holen
Den Scheduler holt man jetzt aus dem ServletContext:
/** * returns the scheduler */ public static Scheduler getScheduler(ServletContext context) throws SchedulerException { StdSchedulerFactory factory = (StdSchedulerFactory) context .getAttribute("org.quartz.impl.StdSchedulerFactory.KEY"); return factory.getScheduler("MyScheduler"); }
That's it. Jetzt kann man Quartz in Tomcat verwenden.
JobStore in der Datenbank
Um die in der web.xml definierte DataSource der Anwendung mitzubenutzen muss man in quartz.properties
nur folgendes einstellen:
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.dataSource = <datasource-name>
org.quartz.dataSource.eweb_pool.jndiURL = java:comp/env/jdbc/
<datasource-name>
org.quartz.jobStore.tablePrefix = QRTZ_
Die Definitionen für die Datenbanktabellen sind im Downloadpaket von Quartz enthalten.