Tomcat+Sevrlet实现定时任务
1.准备一个Tomcat,一个servlet的jar包。我用的是apache-tomcat-8.5.51和servlet-api.jar
2.在eclipse里面新建一个工程,编写要定时执行的任务,MyTask.java是要执行的任务,TaskListener.java是一个监听器
3.MyTask.java代码如下
package com.test.cn; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); String time = sdf.format(d); System.out.println("定时扫描监听器程序开始执行时间:" + time); } }
4.TaskListener.java代码如下
package com.test.cn; import java.util.Calendar; import java.util.Date; import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class TaskListener implements ServletContextListener { private Timer timer = null; @Override public void contextDestroyed(ServletContextEvent arg0) { } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("定时器启动"); try { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 20); // 控制时,24小时制 calendar.set(Calendar.MINUTE, 59); // 控制分 calendar.set(Calendar.SECOND, 0); // 控制秒 Date time = calendar.getTime(); // 执行任务的时间,可自行修改,此时为12:00:00 timer = new Timer(true); //参数1:需要执行的类,参数2:执行时间,参数3:执行周期(参数可自行修改) //默认执行MyTask类下的run()方法; timer.scheduleAtFixedRate(new MyTask(), time, 1000*5); //隔一天(周期性)扫描执行方法, } catch (Exception e) { e.printStackTrace(); } } }
5.打开apache-tomcat-8.5.51的目录,进入到E:\apache-tomcat-8.5.51\webapps下面,新建一个自己的Web应用,如下
6.应用下面建一个名称为WEB-INF文件夹(注意,名称一定要为WEB-INF)
7.WEB-INF文件夹下的文件如下,classes放的是你的源代码编译之后的class文件,lib里面放的是所需要的jar包,这里简单的任务放servlet-api.jar就好了,如果用到其他的,需要加进来,web.xml是配置文件
8.web.xml的内容如下,其中com.test.cn.TaskListener为你的监听器那个类的全名
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app 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_3_0.xsd" version="3.0"> <listener> <listener-class>com.test.cn.TaskListener</listener-class> </listener> </web-app>
9.工作已经做完了,进入E:\apache-tomcat-8.5.51\bin目录下,双击startup.bat将服务跑起来,可以看到定时任务已经执行起来了
Tips:
如果Tomcat运行的时候报端口被占用错误,将E:\apache-tomcat-8.5.51\conf目录下的server.xml改一下即可,换个端口