Tomcat启动时自动加载Servlet
1、想做一个服务启动时自动启动一不停止的获取订阅功能
2、之前是做一个Jsp页面请求servlet来触发方法
3、现在实现Tomcat启动时自动加载Servlet
1、Tomcat中启动Servlet时,只需要在Servlet所在的工程的配置文件web.xml中写成如下即可
<!-- 自动启动订阅接口 --> <servlet> <servlet-name>TimeServlet</servlet-name> <servlet-class>servlet.TimeServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>TimeServlet</servlet-name> <url-pattern>/servlet/TimeServlet</url-pattern> </servlet-mapping>
所以最主要的是加一句:<load-on-startup>1</load-on-startup>
2、在Servlet中写一个初始化方法,servlet名字要根据配置的一致。TimeServlet
package servlet; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import javax.servlet.http.HttpServlet; import log.LogTimerTask; import topic.TmallTopic; /** * 服务器启动时自动启动线程 * @author chenv 2016-9-13 * */ public class TimeServlet extends HttpServlet { private static final long serialVersionUID = 1L; public TimeServlet() { super(); } public void init(){ //线程一,启动天猫订阅 Thread t1=new Thread(){ public void run(){ TmallTopic topic = new TmallTopic(); topic.openTopic(); //System.out.println("异步启动天猫订阅"); } }; t1.start(); //线程二,启动日志记录 Thread t2 = new Thread(){ public void run(){ TimerTask task = new LogTimerTask(); Calendar calendar= Calendar.getInstance(); Date firstTime = calendar.getTime(); //间隔:1小时 long period = 1000*60*60; Timer timer = new Timer(); timer.schedule(task, firstTime, period); } }; t2.start(); } }
Tomcat启动时自动加载Servlet就可以了。
扩展:
servlet定时输出
package servlet; import java.io.IOException; import java.util.Timer; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; public class TimeServlet extends HttpServlet { private static final long serialVersionUID = 1L; public TimeServlet() { super(); } public void init() throws ServletException { Timer timer = new Timer(); timer.schedule(new MyTask(), 1000, 2000);// 在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务. // 这个是用来停止此任务的,否则就一直循环执行此任务了 while (true){ try { int ch = System.in.read(); //输入字符“c”,回车即停止执行 if (ch - 'c' == 0){ timer.cancel();// 使用这个方法退出任务 } } catch (IOException e) { e.printStackTrace(); } } } //具体执行的任务 class MyTask extends java.util.TimerTask{ public void run() { System.out.println("____ok____"); } } public void destroy() { super.destroy(); } }