Struts 2 Spring 3 Quartz 1.8スケジューラの例
このチュートリアルでは、
Struts 2 + Spring 3 + Quartz 1.8.6
の統合方法を説明します。
使用されるツール
-
Spring 3.1.5.RELEASE
-
クォーツ1.8.6
-
Struts 2.3.4
-
Struts2-spring-plugin 2.3.4
-
Maven 3
-
Eclipse 4.2
1.プロジェクトフォルダ
ここに最終的なプロジェクトフォルダ構造があります。

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)
参考文献
統合例]。
http://struts.apache.org/2.x/docs/spring-plugin.html
[Struts 2 Spring
プラグインのドキュメント]。
http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/scheduling/quartz/QuartzJobBean.html%0A
[QuartzJobBean
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石英統合の例]