このチュートリアルでは、

Struts 2 + Spring 3 + Quartz 1.8.6

の統合方法を説​​明します。

使用されるツール

  1. Spring 3.1.5.RELEASE

  2. クォーツ1.8.6

  3. Struts 2.3.4

  4. Struts2-spring-plugin 2.3.4

  5. Maven 3

  6. Eclipse 4.2

1.プロジェクトフォルダ

ここに最終的なプロジェクトフォルダ構造があります。


image、title = "struts2-spring3-quartz"、width = 409、height = 324

2.依存関係ライブラリ

統合はこのリンクと似ています://struts2/struts-2-spring-quartz-scheduler-integration-example/[Spring 2.5.6 + Quartz 1.6]、Spring3の依存関係はちょっと面倒です。このチュートリアルを開発するために必要なすべての依存関係について、以下に示します。

そのjarファイルが必要な理由を理解するには、XMLコメントを参照してください。


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>1.8.6</version>
  </dependency>

  <!-- Spring 3 dependencies -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.1.2.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.1.2.RELEASE</version>
  </dependency>

  <!-- QuartzJobBean in spring-context-support.jar -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>3.1.2.RELEASE</version>
  </dependency>

  <!-- Struts 2 + Spring 3 need this jar, ContextLoaderListener -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.1.2.RELEASE</version>
  </dependency>

  <!-- Spring + Quartz need transaction -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>3.1.2.RELEASE</version>
  </dependency>

  <!-- Struts 2 + Spring integration plugins -->
  <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-spring-plugin</artifactId>
    <version>2.3.4</version>
  </dependency>

</dependencies>
  ...

3.スプリング3+クォーツ

Spring3とQuartzの両方を統合するには、

org.springframework.scheduling.quartz.QuartzJobBean`を拡張し、

executeInternal() `メソッドを実装します。これは、Quartzでスケジューラジョブを作成する方法と同じです。


File:SchedulerJob.java

package com.mkyong.quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class SchedulerJob extends QuartzJobBean
{

    protected void executeInternal(JobExecutionContext context)
    throws JobExecutionException {

        System.out.println("Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2");

    }
}


File:applicationContext.xml

– Quartzのスケジューラ全体とSpringの詳細を `applicationContext.xml`に入れます。詳細はXMLコメントを参照してください。

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

  <!-- Spring Quartz Scheduler job -->
  <bean name="schedulerJob" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="com.mkyong.quartz.SchedulerJob"/>
  </bean>

  <!-- Cron Trigger, run every 10 seconds -->
  <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="schedulerJob"/>
    <property name="cronExpression" value="0/10 **  **  **  **  ?"/>
  </bean>

  <!-- DI -->
  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="jobDetails">
        <list>
            <ref bean="schedulerJob"/>
        </list>
    </property>

    <property name="triggers">
        <list>
            <ref bean="cronTrigger"/>
        </list>
    </property>
  </bean>

</beans>

4. Struts 2 + Spring 3

  • Struts 2 + Spring ** を統合するには、

    org.springframework.web.context.ContextLoaderListener`リスナークラスを

    web.xml`ファイルに入れてください。

  • Note ** +詳細については、//struts2/struts-2-spring-integration-example/[Struts 2 + Spring integration example]のリンクを参照してください。


File: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>
        org.springframework.web.context.ContextLoaderListener
      </listener-class>
    </listener>

</web-app>

5.デモ

終了すると、Strut2が起動すると、Springを呼び出し、定義されたQuartzのジョブを実行します。

Jul 24, 2012 4:49:07 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler["http-bio-8080"]Jul 24, 2012 4:49:07 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler["ajp-bio-8009"]Jul 24, 2012 4:49:07 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3430 ms
Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2 //run this every 10 seconds.
Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2
Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2

ソースコードをダウンロードする

それをダウンロードしてください://wp-content/uploads/2012/07/Struts2-Spring3-Quartz-Example.zip[Struts2-Spring3-Quartz-Example.zip](20 KB)

参考文献

JavaDoc]。

https://jira.springsource.org/browse/SPR-8581

[Springがサポートする必要があります

クォーツ2.0 CronTriggerインターフェイス]。リンク://struts2/struts-2-spring-quartz-scheduler-integration-example/[Struts

2春2.5.6石英統合の例]