Tomcat设定定时任务

时间:2022-01-09 21:48:30

这个问题折腾了一天半,简直太笨了我。网上各种资料都一模一样的不能用。


需求是有一个类随着Tomcat启动而开始执行,之后每隔一段时间循环执行。

方法:

1、制作定时任务Servlet,需要用到java.util.Timer:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.Timer; 
public class ServerRun extends HttpServlet{
	private Timer timer = null; 
    public void init(ServletConfig config) throws ServletException{
        super.init(config);
		timer = new Timer(true); 
		timer.schedule(new Todo(), 0, 1000*60);
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{}
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{}
    public void destroy(){}
}

说明:timer.schedul()这个方法可以设定执行的操作,并设定延迟时间和间隔时间。分别对应括号内的三个参数。在Servlet的init方法中用Timer是为了把这个Servlet加入Tomcat启动项之后能执行Timer。

2、定义Todo类:

import java.util.TimerTask;
public class Todo extends TimerTask{
    @Override
    public void run(){System.out.println("I am running.");//你需要执行的操作}
}

说明:这个类用到了TimerTask,见第一步中schedule中的需要执行的操作,在这里重写他的run方法,在其中定义我的操作。

2、设定web.xml:添加一个随Tomcat启动的类:

    <servlet>
	  <servlet-name>ServerRun</servlet-name>
	  <servlet-class>ServerRun</servlet-class>
	  <load-on-startup>1</load-on-startup>
    </servlet>

说明:修改web.xml关键是有<load-on-startup>这句,可以使<servlet-class>中的类随Tomcat启动而启动。


综上,就可以实现定时循环执行某任务的需求。