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石英統合の例]