Reference:《Java定时器timer.schedule在Web中间隔执行任务和定时》《【Java】Timer和TimerTask详解

做了一个Demo,完成如下的功能:

让Tomcat在WEB程序启动的时候启动一个线程池和一个Timer线程,Timer线程每隔一段时间跑一次(比如检查到期的用户,类似轮询查看),然后触发另一个后台线程(甩给线程池去处理,比如处理到期的用户,发送等)。

直接用代码说话

StarupListener.java

package Listeners;
import java.util.Timer;
import java.util.concurrent.Executors;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import BackStage.MyTimerTask;
import Support.PoolManager;
	@Override
		sce.getServletContext().log("定时器销毁");
	@Override
		sce.getServletContext().log("启动线程池");
		// Start a thread pool to deal with different task;
		PoolManager.pool = Executors.newFixedThreadPool(10);
		sce.getServletContext().log("启动定时器");
		Timer timer=new Timer(true);
		timer.schedule(new MyTimerTask(sce.getServletContext()), 0,10 * 1000);
		sce.getServletContext().log("已经添加任务调度表");
}

MyTimeTask.java

package BackStage;
import java.util.TimerTask;
import javax.servlet.ServletContext;
import Support.PoolManager;
	private ServletContext context = null;
           private int  param;
		this.context = context;
	@Override
		context.log("开始执行指定定時任务");
		System.err.println("号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务");
		PoolManager.pool.execute(new WorkThread(param++));
		context.log("指定定時任务执行结束");
}

PoolManager.java

package Support;
import java.util.concurrent.ExecutorService;
	public static ExecutorService pool;
package BackStage;
	private int param;
		this.param = param;
	@Override
		// TODO Do something
		System.err.println("我被线程池调用执行啦~!参数:" + param);
}

web.xml片段

<listener>
listener-class>Listeners.StartupListener</listener-class>
listener>

输出结果:(我就喜欢用System.err输出红色的!多喜庆╮(╯▽╰)╭)

信息: 开始执行指定定時任务
号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务

2011-3-31 18:26:46 org.apache.catalina.core.ApplicationContext log

信息: 指定定時任务执行结束

我被线程池调用执行啦~!参数:1

2011-3-31 18:26:56 org.apache.catalina.core.ApplicationContext log

信息: 开始执行指定定時任务

号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务

我被线程池调用执行啦~!参数:2

2011-3-31 18:26:56 org.apache.catalina.core.ApplicationContext log

信息: 指定定時任务执行结束

2011-3-31 18:27:06 org.apache.catalina.core.ApplicationContext log

信息: 开始执行指定定時任务

号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务

2011-3-31 18:27:06 org.apache.catalina.core.ApplicationContext log

信息: 指定定時任务执行结束

我被线程池调用执行啦~!参数:3

Java Web应用启动间隔执行的程序的更多相关文章

  1. Web容器启动中执行某个Java类

    1.监听(Listener) <!-- 配置监听 --> <listener> <listener-class>com.xian.jdbc.GetPropertie ...

  2. 详解Java Web项目启动执行顺序

    一. web.xml加载过程(步骤): 启动web项目,容器(如Tomcat.Apache)会去读取它的配置文件web.xml 中的两个节点,context-param和listener. 紧接着,容 ...

  3. Java Web项目启动执行顺序

    一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xml,读取<context-param>和<listener>两个节点. 2.接着,容器创建一个Serv ...

  4. java web项目启动加载顺序

    转载:https://www.cnblogs.com/writeLessDoMore/p/6935524.html web.xml加载过程(步骤):       1.启动WEB项目的时候,容器(如:T ...

  5. docker简单入门之使用docker容器部署简单的java web开源项目jpress博客程序

    一.在centos7.3上安装docker 前置条件 x86_64-bit 系统 kernel 3.10+ .检查内核版本,返回的值大于3.10即可 [root@node1 ~]# uname -r ...

  6. Spring在Web容器启动时执行初始化方法

    需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法 ...

  7. maven的java web项目启动找不到Spring ContextLoaderListener的解决办法

    用maven搭建的java web项目,上传到git仓库后,当同事clone下来项目,部署到tomcat运行时,就报了如下错误,即启动web项目时,加载web.xml文件,找不到spring的监听器, ...

  8. java web 项目启动的根目录,以及项目启动后使用的端口具体是哪一个

    1.今天启动项目发现一直找不到网页,原来是自己浏览器地址的根目录出现了问题,那么系统中的根目录(也就是项目名)到底是哪个,究竟以哪个为基准? 这里有一地方不能忽视:见图片 在普通的java web项目 ...

  9. 在web项目启动时执行某个方法

    在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...

随机推荐

  1. [Tommas] 如何创建自动化功能测试的基本原则

    每个实行持续交付的项目,都有生产流水线的元素,如持续集成和自动化测试.这些测试是在不同层面进行的,从单元测试到冒烟测试再到功能测试.自动化功能测试的优点之一是可重复性和可预测的执行时间.出于这个原因, ...

  2. 【转】Kinect使用

    文章转自http://blog.csdn.net/yangtrees/article/details/16106271 Kinect中深度值最大为4096mm (0x0fff) 微软建议在开发中使用1 ...

  3. Java HTTP请求

    注意:java  http请求要放在 try catch里面,该过程是一个阻塞过程,所以需要新建一个线程进行处理 try { HttpPost request = new HttpPost(URL); ...

  4. 待修改 nyoj 412 又是一个遗留问题

    测试的数据都正确啊,跟别人正确代码也对比了一下,一直wrong ans,这道题是搞不定了,思路是这样的,一个int 的数, 例如 一个数的二进制是1001100,那么大于这个数的最小的有相同个数1的数 ...

  5. codeforce 621C Wet Shark and Flowers

    题意:输入个n和质数p,n个区间,每个区间可以等概率的任选一个数,如果选的这个区间和它下个区间选的数的积是p的倍数的话(n的下个是1),就挣2000,问挣的期望 思路:整体的期望可以分成每对之间的期望 ...

  6. HDU FatMouse's Speed 基本DP

    题意:要求找到的体重递增,速度递减的老鼠,并且输出最长的长度数,而且输出各自的序列数.Special Judge 思路:先按体重由小到大排序,再找最长速度递减序列. 转移方程:mou[i].w> ...

  7. hdoj 1898 Sempr == The Best Problem Solver?

    Sempr == The Best Problem Solver? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/3276 ...

  8. RSA加密解密操作

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. 理解C# Lazy<T>

    1.Lazy<T>解决什么问题? 考虑下面的需求,有个对象很大,创建耗时,并且要在托管堆上分配一大块空间.我们当然希望,用到它的时候再去创建.也就是延迟加载,等到真正需要它的时候,才去加载 ...

  10. 基于smack的xmpp packet 重写

    基于Smack 实现Notification数据包.smack的类中有一个org.jivesoftware.smack.packet.IQ只需对他重写即可,在做的时候其实可以简单一点的,如果你使用ti ...