Struts 2 Quartz 2スケジューラー統合の例
Struts 2にはプラグインのような準備ができていない “Struts2-Quartz.jar”が付属していますが、このハックは両方のフレームワークをリンクするための標準サーブレットリスナーを使用しています。関係を見る
Struts 2 <-- (Listener)--> Quartz <---> Scheduler task
このチュートリアルでは、Struts 2とQuartzスケジューラフレームワークの両方を統合する方法を説明します。
使用されるツール:
-
Struts 2.3.4
-
クォーツ2.1.5
-
Tomcat 6または7
-
Maven 3
-
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)
参考文献
-
リンク://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
春の石英の統合例]