定时任务三:quartz 外部监听

本文介绍如何在Tomcat中使用自定义监听器并在应用启动时触发定时任务。通过实现`ServletContextListener`接口创建监听器,并在`web.xml`中配置。此外,还介绍了如何使用Quartz框架设置定时任务。

一、自定义监听: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();
		}

	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值