Java Web应用启动间隔执行的程序
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应用启动间隔执行的程序的更多相关文章
- Web容器启动中执行某个Java类
1.监听(Listener) <!-- 配置监听 --> <listener> <listener-class>com.xian.jdbc.GetPropertie ...
- 详解Java Web项目启动执行顺序
一. web.xml加载过程(步骤): 启动web项目,容器(如Tomcat.Apache)会去读取它的配置文件web.xml 中的两个节点,context-param和listener. 紧接着,容 ...
- Java Web项目启动执行顺序
一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xml,读取<context-param>和<listener>两个节点. 2.接着,容器创建一个Serv ...
- java web项目启动加载顺序
转载:https://www.cnblogs.com/writeLessDoMore/p/6935524.html web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:T ...
- docker简单入门之使用docker容器部署简单的java web开源项目jpress博客程序
一.在centos7.3上安装docker 前置条件 x86_64-bit 系统 kernel 3.10+ .检查内核版本,返回的值大于3.10即可 [root@node1 ~]# uname -r ...
- Spring在Web容器启动时执行初始化方法
需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法 ...
- maven的java web项目启动找不到Spring ContextLoaderListener的解决办法
用maven搭建的java web项目,上传到git仓库后,当同事clone下来项目,部署到tomcat运行时,就报了如下错误,即启动web项目时,加载web.xml文件,找不到spring的监听器, ...
- java web 项目启动的根目录,以及项目启动后使用的端口具体是哪一个
1.今天启动项目发现一直找不到网页,原来是自己浏览器地址的根目录出现了问题,那么系统中的根目录(也就是项目名)到底是哪个,究竟以哪个为基准? 这里有一地方不能忽视:见图片 在普通的java web项目 ...
- 在web项目启动时执行某个方法
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...
随机推荐
- 【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
首先要下载安装光盘. Matlab801_MacUnix.iso [root@db-172-16-3-150 mnt]# md5sum /ssd1/Matlab801_MacUnix.iso 0d3 ...
- LittleTools之网格输出为模型
我经常要在Unity中生成一些网格,但是这些网格需要交给美工修改,所以又要将网格输出为模型.于是就有了下面的代码: using UnityEngine; using UnityEditor; usin ...
- bzoj3998 [TJOI2015]弦论(SAM)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3998 [题意] 询问排名第k的子串是谁,0代表相同子串不同位置算作相同,1代表相同子串 ...
- HADOOP2.2.0安装配置指南
一. 集群环境搭建 这里我们搭建一个由三台机器组成的集群: Ip地址 用户名/密码 主机名 集群中角色 操作系统版本 192.168.0.1 hadoop/hadoop Hadoop-mast ...
- sed命令教程
转载自:http://coolshell.cn/articles/9104.htmlawk于1977年出生,今年36岁本命年,sed比awk大2-3岁,awk就像林妹妹,sed就是宝玉哥哥了.所以 林 ...
- Mac Vim 如何设置高亮
首先进入如下目录 cd /usr/share/vim 然后打开vimrc sudo vim vimrc 在vimrc中的“set backspace=2”这行下插入如下代码: set ai " ...
- HW2.5
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- Miller-Rabin素性测试(POJ3641)
一.概念引入 在以往判断一个数n是不是素数时,我们都是采用i从2到sqrt(n)能否整除n.如果能整除,则n是合数;否则是素数.但是该算法的时间复杂度为O(sqrt(n)),当n较大时,时间性能很差, ...
- 教程-Delphi调用C# WEBSERVICE(二)
第二步:将webserivce的WSDL导入到该dll工程中,如何导,方法至少有两种,我说简单的一种: file->new->other->WebService->WSDL ...
- SPOJ4206Fast Maximum Matching(hopcroft-karp)
题目请戳这里 题目大意:裸的二分匹配. 题目分析:数据比较强,用来测模版的.这题用hungry跑着会比较吃力,所以用hopcroft-karp算法.这个算法较hungry高效是因为每次bfs找到一个增 ...