Struts 2 + Quartz 2スケジューラー統合の例
Updated 2012-07-24
記事は、最新のStruts2とQuartz2を使用するように更新され、Tomcat6と7でテストされています。
Struts 2には、プラグインのような準備が整った「Struts2-Quartz.jar」は付属していません。ハックでは、標準のサーブレットリスナーを使用して両方のフレームワークをリンクします。 関係を見る
Struts 2 <-- (Listener)--> Quartz <---> Scheduler task
このチュートリアルでは、Struts 2とQuartzスケジューラフレームワークの両方を統合する方法を示します。
使用ツール:
-
Struts 2.3.4
-
クォーツ2.1.5
-
Tomcat 6または7
-
メーベン3
-
Eclipse 4.2
1. 依存ライブラリ
多くの依存関係はありません。Struts2とQuartz jarファイルが必要です。
ファイル:pom.xml
...... org.apache.struts struts2-core 2.3.4 org.quartz-scheduler quartz 2.1.5 org.apache.tomcat servlet-api 6.0.35
2. スケジューラージョブ
Quartzのジョブを作成し、1行を印刷します。
ファイル:SchedulerJob.java
package com.example.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()メソッドが自動的に実行されます。
ファイル:QuartzSchedulerListener.java
package com.example.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.example.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
Struts 2 Web Application struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* com.example.listener.QuartzSchedulerListener
5. Demo
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)