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();
} }

Tomcat启动时自动加载Servlet的更多相关文章

  1. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  2. 如何在tomcat启动时自动加载一个类

    有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  3. tomcat启动时自动加载一个类 MyServletContextListener

    目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一 ...

  4. 如何让openvpn在windows启动时自动加载

    在非常需要vpn的人群中,他们几乎一整天都连接着vpn,但是每次开机都要连接vpn的过程有时候比较繁琐对于新手而言.这篇文章主要是说明如何在windows启动时自动加载openvpn自动连接,该教程适 ...

  5. [转]在BBB启动时自动加载dtbo(或执行脚本、运行程序)

    启动时自动加载dtbo,实际上就是做了一个cape.官方推荐的方法是用eeprom来实现,请参考我的博文<为BBB制作专属自己的cape(一)>和<为BBB制作专属自己的cape(四 ...

  6. Spring Web项目spring配置文件随服务器启动时自动加载

    前言:其实配置文件不随服务器启动时加载也是可以的,但是这样操作的话,每次获取相应对象,就会去读取一次配置文件,从而降低程序的效率,而Spring中已经为我们提供了监听器,可监听服务器是否启动,然后在启 ...

  7. CentOS启动时自动加载内核模块

    要想在CentOS中自动加载内核模块,需要在/etc/sysconfig/modules/目录中增加一个脚本,在此脚本中加载所需的模块. 下面是我所用的一个名为8021q.modules的脚本,用来在 ...

  8. 设置R启动时自动加载常用的包或函数

    在我前面的文章(http://www.cnblogs.com/homewch/p/5749850.html)中有提到R可以自定义启动环境,需要修改R安装文件中的ect文件夹下的配置文件Rprofile ...

  9. WEB启动时就加载servlet的dopost方法

    web启动的时候可以加载servlet的init方法,无法加载dopost方法,如果你需要什么内容在启动的时候执行,可以将内容放到init方法里面,dopost方法,是在客户端使用post请求的时候才 ...

随机推荐

  1. Python的标准输出

    遇到什么就添加到这里来. 首先,是最基本的. print "Number is %d %f %s"%(intA,floatB,stringC) 如果对浮点数的精度有所要求的话,比如 ...

  2. 支付宝Andfix 原理解析

    支付宝Andfix 原理解析 使用参考地址: http://blog.csdn.net/qxs965266509/article/details/49802429 原理参考地址: http://blo ...

  3. 嵌套循环中break、continue的用法

    在循环语句中经常会用到break.continue语句,基本用法如下: 一.break语句为退出当前循环,在嵌套循环中结果如下: var num=0; for(var i=0;i<5;i++){ ...

  4. Oracle学习笔记(二)

    2.Oracle用户管理 (1)创建用户:create user 用户名 identified by 密码(需要dba权限); sql>create user yzw identified by ...

  5. iscsi与multipath

    2016-10-01/21:07:24 http://www.cnblogs.com/wuchanming/p/4019660.htmlhttp://czmmiao.iteye.com/blog/20 ...

  6. IOS零碎技术整理(3)-获取wifi列表

    1.   该功能实现基于MobileApple80211框架来进行开发,而目前该框架成为了私有框架,其中的API均为私有API. 如果使用这些API可能导致应用不能上app store或者ios版本升 ...

  7. [git]rebase和merge

    转自:http://blog.csdn.net/wh_19910525/article/details/7554489 Git merge是用来合并两个分支的. git merge b # 将b分支合 ...

  8. CG Rendering v.s. Browser Rendering

    浏览器的渲染技术 v.s. CG渲染器的渲染技术 看了两篇文章: 浏览器的渲染原理简介, How browsers work(译文), 想到了一些东西, 对比两者, 或许有些东西能想得更明白些. 以下 ...

  9. Linux命令(22)find的使用

    在linux下面工作,有些命令能够大大提高效率. 比如说find命令,他哥俩可以算是必会的linux命令,几乎每天都要用到他们. find命令 find命令的一般形式 find命令的常用选项及实例 f ...

  10. SQL SERVER 导出数据,数据与结构,结构

    1.右键数据库->任务->生成脚本 2.选择数据库对象,可以整个表,也可以选择部分表 3.下一步,设置脚本编写选项.选择高级,在高级中,倒数第二项,'要编写脚本的数据的类型'中,可以选择导 ...