Java Web应用启动间隔执行的程序
2011-03-31 19:24
381 查看
Reference:《Java定时器timer.schedule在Web中间隔执行任务和定时》《【Java】Timer和TimerTask详解》
做了一个Demo,完成如下的功能:
让Tomcat在WEB程序启动的时候启动一个线程池和一个Timer线程,Timer线程每隔一段时间跑一次(比如检查到期的用户,类似轮询查看),然后触发另一个后台线程(甩给线程池去处理,比如处理到期的用户,发送等)。
直接用代码说话
StarupListener.java
MyTimeTask.java
PoolManager.java
WorkThread.java
web.xml片段
输出结果:(我就喜欢用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
做了一个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;
public class StartupListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sce) {
sce.getServletContext().log("定时器销毁");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
sce.getServletContext().log("启动线程池");
// Start a thread pool to deal with different task;
PoolManager.pool = Executors.newFixedThreadPool(10);
sce.getServletContext().log("启动定时器");
//Create a Daemon timer thread
Timer timer=new Timer(true);
// 每隔10秒钟执行任务
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;
public class MyTimerTask extends TimerTask {
private ServletContext context = null;
private int param;
public MyTimerTask(ServletContext context) {
this.context = context;
}
@Override
public void run() {
context.log("开始执行指定定時任务");
// TODO 自定义
System.err.println("号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务");
//让线程池去跑一个任务
PoolManager.pool.execute(new WorkThread(param++));
context.log("指定定時任务执行结束");
}
}
PoolManager.java
package Support;
import java.util.concurrent.ExecutorService;
public class PoolManager {
public static ExecutorService pool;
}
WorkThread.java
package BackStage;
public class WorkThread implements Runnable {
private int param;
public WorkThread(int param) {
this.param = param;
}
@Override
public void run() {
// 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应用启动间隔执行的程序
- Java Web应用启动后执行定时任务-ScheduledThreadPoolExecutor
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- java Web 启动时自动执行代码的几种方式
- JavaWeb项目启动时,自动执行代码…
- Web应用中的普通java程序获取资源文件
- 详解Java Web项目启动执行顺序
- 在java的web应用中实现定期执行任务方法一
- asp.net 通过Global.asax 定时执行web应用中的的程序
- java 在web项目启动时,执行某个方法
- java Web 启动时自动执行代码的几种方式
- 在执行Java命令或eclipse启动程序,提示报错’jvm.cfg无法找到’的解决办法
- Java桌面应用安装部署、安装程序制作(exe4j + Inno Setup) ——之二:使用MyEclipse将应用制作成可执行的JAR包
- Java中如何让web服务器启动的时候自动运行web程序中某个类的某个方法
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- Java桌面应用安装部署、安装程序制作(exe4j + Inno Setup)——之三:使用exe4j生成EXE可执行文件
- 在启动脚本中一般使用类似如下的命令执行一个Java程序
- Java-Servlet--《12-WEB应用中的普通Java程序如何读取资源文件.mp4》 有疑问
- WEB应用中的普通Java程序如何读取资源文件
- java web应用部署到tomcat6上Spring定时任务执行两次解决