Пример интеграции планировщика Struts 2 + Quartz 2

Пример интеграции планировщика Struts 2 + Quartz 2

Updated 2012-07-24
Статья обновлена ​​для использования последних версий Struts 2 и Quartz 2 и протестирована на Tomcat 6 и 7.

Struts 2 не поставляется с готовым плагином типа «Struts2-Quartz.jar», для этого используется стандартный Servlet Listener для связывания обоих фреймворков вместе. Посмотреть отношения

Struts 2 <-- (Listener)--> Quartz <---> Scheduler task

В этом руководстве мы покажем вам, как интегрировать структуру планировщика Struts 2 и Quartz вместе.

Используемые инструменты:

  1. Стойки 2.3.4

  2. Кварц 2.1.5

  3. Tomcat 6 или 7

  4. Maven 3

  5. Затмение 4.2

1. Библиотеки зависимостей

Не много зависимостей, вам просто нужен файл jar Struts 2 и Quartz.

Файл: pom.xml

  ...
   

    
    
        org.apache.struts
        struts2-core
        2.3.4
    

    
    
        org.quartz-scheduler
        quartz
        2.1.5
    

        
    
        org.apache.tomcat
        servlet-api
        6.0.35
    

  
  ...

2. Планировщик заданий

Создайте задание Quartz и распечатайте одну строку.

Файл: SchedulerJob.java

package com.example.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class SchedulerJob implements Job {
    public void execute(JobExecutionContext context)
        throws JobExecutionException {

        System.out.println("Struts 2.3.4 + Quartz 2.1.5");

    }
}

3. Слушатель сервлета

Создайте стандартный класс слушателя сервлета, чтобы выполнить интеграцию. Он вызывает структуру планировщика Quartz внутри методаcontextInitialized(). Во время инициализации контейнера сервлетов этот методcontextInitialized() будет выполняться автоматически.

Файл: QuartzSchedulerListener.java

package com.example.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.example.quartz.SchedulerJob;

public class QuartzSchedulerListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent arg0) {
        //
    }

    public void contextInitialized(ServletContextEvent arg0) {

        JobDetail job = JobBuilder.newJob(SchedulerJob.class)
            .withIdentity("anyJobName", "group1").build();

        try {

            Trigger trigger = TriggerBuilder
              .newTrigger()
              .withIdentity("anyTriggerName", "group1")
              .withSchedule(
                 CronScheduleBuilder.cronSchedule("0/10 * * * * ?"))
              .build();

            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.start();
            scheduler.scheduleJob(job, trigger);

        } catch (SchedulerException e) {
            e.printStackTrace();
        }

    }
}

4. web.xml

Поместите класс слушателяQuartzSchedulerListener.java в файлweb.xml.

Файл: web.xml




    Struts 2 Web Application

    
      struts2
      
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
          
    

    
      struts2
      /*
    

    
      
            com.example.listener.QuartzSchedulerListener
          
    

5. Demo

После запуска проекта Struts 2 зарегистрированный класс слушателяQuartzSchedulerListener.java будет запущен и вызовет запланированное задание Quartz для выполнения методаSchedulerTask.printSchedulerMessage() каждые 10 секунд.

INFO: Overriding property struts.i18n.reload - old value: false new value: true
Jul 23, 2012 4:56:47 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Overriding property struts.configuration.xml.reload - old value: false new value: true
Jul 23, 2012 4:56:48 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Jul 23, 2012 4:56:48 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Jul 23, 2012 4:56:48 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/38  config=null
Jul 23, 2012 4:56:48 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1215 ms
Struts 2.3.4 + Quartz 2.1.5
Struts 2.3.4 + Quartz 2.1.5

Скачать исходный код

Скачать -Struts2-Quartz-Example.zip (22 КБ)