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

时间: 2024-11-07 13:28:18

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

Windows编程 - 启动可执行(exe)程序 代码(C++)

启动可执行(exe)程序 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 通过输入程序位置启动可执行(exe)程序, 使用windows的CreateProcess()函数, 即可. 示例是调用预先生产的可执行(exe)程序. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <

Java Web(2):第一个 Servlet 程序

Servlet 是 Java 服务端程序,Servlet 程序是运行在服务器上的 Seervlet 程序代码: package g.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequ

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

1.监听(Listener) <!-- 配置监听 --> <listener> <listener-class>com.xian.jdbc.GetProperties</listener-class> </listener> package com.xian.jdbc; public class GetProperties{ }      //implements ServletContextListener  可实现servlet的监听则启动中

Java Web项目启动执行顺序

一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xml,读取<context-param>和<listener>两个节点. 2.接着,容器创建一个ServletContext(servlet上下文),这个web项目的所有部分都讲共享这个上下文 3.容器将<context-param>转换为键值对,并交给servletContext. 4.容器创建<listener>中的类实例,创建监听器. 二. load-on-startup 元素在w

java web项目启动加载顺序

web.xml加载过程(步骤):       1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文. 3.容器将<context-param></context-param>转

spring在web容器启动时执行初始化方法

需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法很好,但是由于定时任务需要去操作数据库,而项目采用了spring的依赖注入来管理对象,而servlet并不受Spring的管理.若此时在servlet中注入Spring管理的对象,则会报错:javax.naming.NameNotFoundException: Name com.test.InitS

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

用maven搭建的java web项目,上传到git仓库后,当同事clone下来项目,部署到tomcat运行时,就报了如下错误,即启动web项目时,加载web.xml文件,找不到spring的监听器,控制台错误如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

javaweb中服务器启动所执行的程序

1.过滤器 init(FilterConfig),只有web.xml中配置过滤器,服务器启动时将执行,经典案例 struts2框架2servlet init(servletConfig),web.xml配置<servlet><load-on-startup>,服务器启动时就执行,servlet默认初始化在第一次访问的时候,经典案例:springmvcs3.ServletConfigLister监听器,ServletContext对象监听器,用于监听对象创建和销毁的,tomcat启动

java web项目启动时自动加载自定义properties文件

首先创建一个类 public class ContextInitListener implements ServletContextListener 使得该类成为一个监听器.用于监听整个容器生命周期的,主要是初始化和销毁的. 类创建后要在web.xml配置文件中增加一个简单的监听器配置,即刚才我们定义的类. Xml代码 <listener> <!-- lang: xml --> <description>ServletContextListener</descri