Quartz in Tomcat 7 einbinden

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.