这个问题折腾了一天半,简直太笨了我。网上各种资料都一模一样的不能用。
需求是有一个类随着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启动而启动。
综上,就可以实现定时循环执行某任务的需求。