一、自定义监听:MyListener
package com.li;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener {
private SchedulerTest schedulerTest = new SchedulerTest();
// tomcat web项目启动时,调用定时方法
public void contextInitialized(ServletContextEvent sce) {
schedulerTest.Scheduler();
}
// tomcat关闭时,销毁
public void contextDestroyed(ServletContextEvent sce) {
}
}二、web.xml配置监听:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>
com.li.MyListener
</listener-class>
</listener>
</web-app>三、建立定时任务
package com.li;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MyJob implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("++++++++++ 纯quartz ++++++++");
}
}四、设置定时触发器(详见:定时任务一)
import static org.quartz.JobBuilder.newJob;
import org.junit.Test;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class SchedulerTest {
@Test
public void Scheduler() {
try {
// 首先,必需要取得一个Scheduler的引用
SchedulerFactory sf = new StdSchedulerFactory();
// 从调度程序工厂获取一个调度程序的实例
Scheduler scheduler = sf.getScheduler();
// jobs可以在scheduled的sched.start()方法前被调用
// job1 将每隔3秒执行一次
JobDetail jobDetail = newJob(MyJob.class).withIdentity("job1", "group1").build();
// 触发器一:
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?")).build();
// 触发器名,触发器组,触发器时间设定
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
try {
// 主线程等待一分钟(即1分钟后线程运行结束)
Thread.sleep(60L * 1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 关闭定时调度,定时器不再工作
scheduler.shutdown(true);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
本文介绍如何在Tomcat中使用自定义监听器并在应用启动时触发定时任务。通过实现`ServletContextListener`接口创建监听器,并在`web.xml`中配置。此外,还介绍了如何使用Quartz框架设置定时任务。

5166

被折叠的 条评论
为什么被折叠?



