spring 3.0 ベースのアプリケーションで Quartz Scheduler を使用しています。新しいスケジューラを正常に作成でき、正常に動作しています。
私はこのように参照を見てきました。
しかし.. Quartz ジョブ ファイルで servletContext を取得できません。executeInternal() メソッドで servletContext 参照を取得する方法について誰か助けてもらえますか??
spring 3.0 ベースのアプリケーションで Quartz Scheduler を使用しています。新しいスケジューラを正常に作成でき、正常に動作しています。
私はこのように参照を見てきました。
しかし.. Quartz ジョブ ファイルで servletContext を取得できません。executeInternal() メソッドで servletContext 参照を取得する方法について誰か助けてもらえますか??
私にも同様のニーズがありました。ここで提示されたソリューションと同様の方法で整理しました。 私のサーブレット コンテキスト リスナーでは、ジョブ データ マップ オブジェクトを使用してサーブレット コンテキストを設定しています。
@Override
public void contextInitialized(ServletContextEvent sce) {
try {
//Create & start the scheduler.
StdSchedulerFactory factory = new StdSchedulerFactory();
factory.initialize(sce.getServletContext().getResourceAsStream("/WEB-INF/my_quartz.properties"));
scheduler = factory.getScheduler();
//pass the servlet context to the job
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("servletContext", sce.getServletContext());
// define the job and tie it to our job's class
JobDetail job = newJob(ImageCheckJob.class).withIdentity("job1", "group1").usingJobData(jobDataMap).build();
// Trigger the job to run now, and then repeat every 3 seconds
Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startNow()
.withSchedule(simpleSchedule().withIntervalInMilliseconds(3000L).repeatForever()).build();
// Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(job, trigger);
// and start it off
scheduler.start();
} catch (SchedulerException ex) {
log.error(null, ex);
}
}
それから私の仕事の中で私はこれをやっています:
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
ServletContext servletContext = (ServletContext) context.getMergedJobDataMap().get("servletContext");
//...
}
編集: また、Springを使用していると述べたので、このリンクを見つけました。最後の投稿で、ある人が ServletContextAware の実装について言及しています。個人的には、それが役割であるため、JobDataMap を使用します。
Quartz 2.0 以降、web.xml を介して webapp 内でスケジューラを開始する場合、次のように init パラメータとしてQuartzInitializerServlet
設定することにより、SchedulerContext に ServletContext を格納できます。scheduler-context-servlet-context-key
<!-- Quartz Scheduler Initializer Servlet -->
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>scheduler-context-servlet-context-key</param-name>
<param-value>servletContext</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
コードで次のリファレンスを参照してください: https://github.com/elventear/quartz-scheduler/blob/quartz-2.0.0-rc/quartz/src/main/java/org/quartz/ee/servlet/QuartzInitializerServlet.java #L122