Привет Вот ответ на ваш запрос:
1) Шаг 1: Написать работу:
package com.hitesh.quartz.test;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class QuartzJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Hello");
}
}
2) Написать web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestWebBasedQuartz</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>quartz:shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>quartz:wait-on-shutdown</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>quartz:start-on-load</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>
<listener>
<listener-class>com.hitesh.quartz.test.QuartzJobListener</listener-class>
</listener>
</web-app>
Как видите, есть два слушателя. Один из них принадлежит Quartz API, а другой - вашему API. Первый прослушиватель Quartz API будет работать по порядку. На данный момент у нас будет готовый планировщик фабрики. Этот слушатель также запустит планировщик, если соответствующее свойство «кварц: запуск при загрузке» либо не указано, либо указано как true.
3) Напишите свой кварцевый слушатель:
package com.hitesh.quartz.test;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.ee.servlet.QuartzInitializerListener;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzJobListener implements ServletContextListener {
private Scheduler scheduler;
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent ctx) {
JobDetail job = JobBuilder.newJob(QuartzJob.class)
.withIdentity("dummyJobName", "group1").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1).repeatForever())
.build();
try{
scheduler = ((StdSchedulerFactory) ctx.getServletContext().getAttribute(QuartzInitializerListener.QUARTZ_FACTORY_KEY)).getScheduler();
scheduler.scheduleJob(job, trigger);
}catch(SchedulerException e){
}
}
}
Этот слушатель будет выполнен после того, как слушатель Quartz будет выполнен. Это означает, что у нас есть готовая фабрика планировщиков с нами и запущенный планировщик. Так что вам нужно только добавить работу в планировщик. Как вы можете видеть, метод contextDestroyed пуст, так как работа по отключению планировщика будет выполняться программой Quartz API.