Простой пример для Quartz 2.2 и Tomcat 7
Я хочу создать планировщик с Quartz 2.2 в динамическом веб-приложении Java. Я новичок в этой задаче. Я перепробовал все учебники по всему интернету. Я пытаюсь метод прослушивания контекста для инициализации планировщика. Это нене похоже на работу. Программа hello world работает только в общем Java-приложении. для веб-приложения это выглядит сложно.
pom.xml:
4.0.0
test.ananth
test-app
war
1.0-SNAPSHOT
test-app Maven Webapp
http://maven.apache.org
org.quartz-scheduler
quartz
2.2.1
org.apache.tomcat
servlet-api
6.0.30
log4j
log4j
1.2.16
org.quartz-scheduler
quartz-jobs
2.2.0
org.slf4j
slf4j-api
1.6.6
junit
junit
3.8.1
test
test-app
quartz.properties:
#org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
# Main Quartz configuration
org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = MyQuartzScheduler
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
#org.quartz.threadPool.threadCount = 5
HelloJob.java:
package com.test;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job {
public HelloJob() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("Hello! HelloJob is executing.");
}
}
пакет servlet.java com.test;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class MyServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1567185871113714035L;
public void init(ServletConfig cfg) {
String key = "org.quartz.impl.StdSchedulerFactory.KEY";
ServletContext servletContext = cfg.getServletContext();
StdSchedulerFactory factory = (StdSchedulerFactory) servletContext
.getAttribute(key);
// Scheduler quartzScheduler = factory.getScheduler("MyQuartzScheduler");
Scheduler sched;
try {
sched = factory.getScheduler("MyQuartzScheduler");
//sched = factory.getScheduler();//MyQuartzScheduler
sched.start();
// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class).withIdentity("myJob",
"group1").build();
// Trigger the job to run now, and then every 40 seconds
Trigger trigger = newTrigger()
.withIdentity("myTrigger", "group1")
.startNow()
.withSchedule(
simpleSchedule().withIntervalInSeconds(4)
.repeatForever()).build();
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
web.xml:
quartz:shutdown-on-unload
false
quartz:wait-on-shutdown
true
quartz:start-scheduler-on-load
true
quartz:config-file
/WEB-INF/quartz.properties
org.quartz.ee.servlet.QuartzInitializerListener
com.test.ApplicationStartup
Archetype Created Web Application
Я использую веб-приложение Maven Archtype.