Struts 2 Quartz 2スケジューラー統合の例

Struts 2にはプラグインのような準備ができていない "Struts2-Quartz.jar"が付属していますが、このハックは両方のフレームワークをリンクするための標準サーブレットリスナーを使用しています。関係を見る

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

このチュートリアルでは、Struts 2とQuartzスケジューラフレームワークの両方を統合する方法を説明します。

使用されるツール:

  1. Struts 2.3.4

  2. クォーツ2.1.5

  3. Tomcat 6または7

  4. Maven 3

  5. Eclipse 4.2

1.依存関係ライブラリ

多くの依存関係はなく、Struts 2とQuartz jarファイルが必要です。

File:pom.xml

  ...
   <dependencies>

    <!-- Struts 2 -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.3.4</version>
    </dependency>

    <!-- Quartz framework -->
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.1.5</version>
    </dependency>

        <!-- for javax.servlet.**  classes -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>servlet-api</artifactId>
        <version>6.0.35</version>
    </dependency>

  </dependencies>
  ...

2.スケジューラジョブ

Quartzのジョブを作成し、1行を出力します。

File:SchedulerJob.java

package com.mkyong.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.サーブレットリスナー

統合サーブレット・リスナー・クラスを作成して、統合作業を行います。これは `contextInitialized()`メソッドの中でQuartzスケジューラフレームワークを呼び出します。サーブレットコンテナの初期化中、この `contextInitialized()`メソッドは自動的に実行されます。

File:QuartzSchedulerListener.java

package com.mkyong.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.mkyong.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

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app__2__3.dtd" >

<web-app>
    <display-name>Struts 2 Web Application</display-name>

    <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
          </filter-class>
    </filter>

    <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/** </url-pattern>
    </filter-mapping>

    <listener>
      <listener-class>
            com.mkyong.listener.QuartzSchedulerListener
          </listener-class>
    </listener>

</web-app>

5.デモ

Struts 2プロジェクトが開始されると、登録されたリスナークラス QuartzSchedulerListener.java`が起動され、Quartzのスケジュールされたジョブを呼び出して、10秒ごとに SchedulerTask.printSchedulerMessage() `メソッドを実行します。

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 KB)

参考文献

  1. Quartzスケジューラの例

  2. リンク://struts/struts-quartz-scheduler-integration-example/[Struts

石英統合の例]。リンク://struts2/struts-2-spring-quartz-scheduler-integration-example/[Struts

2春の石英の統合例]。リンク://struts/struts-spring-quartz-scheduler-integration-example/[Struts

春の石英の統合例]