Tomcat自动启动后台任务

转载 2012年03月21日 15:43:52

2.13 Listener介绍

Listener的作用非常类似于load-on-startup Servlet。用于在Web应用启动时,启动某些后台程序,这些后台程序负责为系统运行提供支持。

Listener与load-on-startup Servlet的区别在于:Listener的启动时机比load-on-startup Servlet早,只是Listener是Servlet 2.3规范之后才出现的。

Listener实际上就是用于取代那些无须响应用户请求的Servlet,所以Listener类中无须提供响应用户请求的方法,Listener的作用是为整个Web应用提供后台服务。

使用Listener只需要两个步骤:

建Listener实现类。

在web.xml文件中配置Listerner。

2.13.1 创建Listener类

创建Listener类必须实现ServletContextListener接口,该接口包含两个方法。

contextInitialized(ServletContextEvent sce):启动Web应用时,系统调用Listener的该方法。

contextDestroyed(ServletContextEvent sce):关闭Web应用时,系统调用Listener的该方法。

下面将创建一个获取数据库连接的Listener,该Listener会在应用启动时获取数据库连接,并将获取到的连接设置成application范围内的属性。下面是该Listener的代码。

程序清单:codes\02\2.13\ listenerTest\WEB-INF\src\lee\GetConnListener.java

public class GetConnListener implements ServletContextListener
{
//应用启动时,该方法被调用
public void contextInitialized(ServletContextEvent sce)
{
try
{
//取得该应用的ServletContext实例
ServletContext application = sce.getServletContext();
//从配置参数中获取驱动
String driver = application.getInitParameter("driver");
//从配置参数中获取数据库url
String url = application.getInitParameter("url");
//从配置参数中获取用户名
String user = application.getInitParameter("user");
//从配置参数中获取密码
String pass = application.getInitParameter("pass");
//注册驱动
Class.forName(driver);
//获取数据库连接
Connection conn = DriverManager.getConnection(url ,
user , pass);
//将数据库连接设置成application范围内的属性
application.setAttribute("conn" , conn);
}
catch (Exception ex)
{
System.out.println("Listener中获取数据库连接出现异常"
+ ex.getMessage());
}
}
//应用关闭时,该方法被调用
public void contextDestroyed(ServletContextEvent sce)
{
//取得该应用的ServletContext实例
ServletContext application = sce.getServletContext();
Connection conn = (Connection)application.getAttribute("conn");
//关闭数据库连接
if (conn != null)
{
try
{
conn.close();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}
}
}

上面程序中粗体字代码重写了Listener的contextInitialized()、contextDestroyed()方法,这两个方法分别在应用启动、关闭时被调用,这两个方法分别实现获取数据库连接、关闭数据库连接的功能,这些功能都是为整个Web应用提供服务的。

程序中斜体字代码用于获取配置参数,细心的读者可能已经发现Listener获取的是Web应用的配置参数,而不是像Servlet和Filter获取本身的配置参数。这是因为Listener的作用就是为整个应用提供后台服务,所以Listener不能配置自己的配置参数。如果Listener需要参数,总是直接访问Web应用的配置参数。


2.13.2 配置Listener

正如load-on-startup Servlet一样,Listener用于启动Web应用的后台服务程序,但不负责处理及响应用户请求,因此无须配置URL,而且Listener无须配置参数,所以Listener的配置非常简单:只要指定Listener实现类即可。

配置Listener使用listener元素,该元素接受如下子元素:

listener-class:指定Listener实现类。

若将Listener配置在Web容器中(如果Web容器支持Listener),则Listener将随Web应用的启动而启动。

下面是该Listener的配置片段:

<listener>

在上面的配置中,既无须配置Listener的名字,也无须配置Listener的URL,只需配置它的实现类即可。容器将自动检测部署在容器中的Listener,并在应用启动时,自动加载所有的Listener。

一旦容器中的GetConnListener正常启动,我们的所有JSP页面都可通过application获取数据库连接,从而可以非常方便地进行数据库访问。

本例中的Listener把一个数据库连接(Connection实例)设置成application属性,这样将导致所有页面都使用相同的Connection实例,这将导致非常差的性能。较为实用的做法是:应用启动时将一个数据源(javax.sql.DataSource实例)设置成application属性,而所有JSP页面都通过DataSource实例来取得数据库连接,再进行数据库访问,这样就会好得多。关于数据库连接池的介绍请参看笔者所著《疯狂Java讲义》的13.8节。


http://book.51cto.com/art/200810/94278.htm

http://book.51cto.com/art/200810/94280.htm



tomcat启动就定时循环执行的方法

想要在tomcat启动时执行,要通过启动的监听来配置 1.首先要创建监听类SysContextListener继承接口ServletContextListener,同时在初始化的监听里创建定时器,以完...
  • u012964143
  • u012964143
  • 2015年02月11日 11:46
  • 3670

Tomcat 下的定时任务

首先要了解Java Servlet的Listener类既监听器,首先写出监听器: SysContextListener.java package axtic.servlet; import java....
  • hanpoyangtitan
  • hanpoyangtitan
  • 2007年04月24日 13:28
  • 3282

tomcat随windows自动启动

一:确保tomcat 在点击bin\startup 文件可以正常启动访问; 二:本机安装有JDK; 三:本机环境变量配置:JAVA_HOME:C:\Java\jdk1.7.0_17; 四:本机Tomc...
  • jinjianghai
  • jinjianghai
  • 2016年11月03日 15:52
  • 676

windows下tomcat设置开机自启

本帖可能比较啰嗦,但是做到本人所知的尽可能详细。 一、安装JDK 根据自己操作系统的位数(32、64)选择对应的JDK,分为安装版和非安装版。(如下图,都可以在apache官网进行下载,安装直接点...
  • kangcool_sn
  • kangcool_sn
  • 2017年09月21日 16:01
  • 555

tomcat定时任务

# ====== tomcat_shutdown.sh 关闭 #!/bin/sh export JAVA_HOME=/home/oracle/jdk1.7.0_67/ export CLASSP...
  • qq_31666147
  • qq_31666147
  • 2016年04月18日 10:29
  • 131

Tomcat定时任务

原文: The   load-on-startup   element   indicates   that   this   servlet   should   be   loaded   (in...
  • unix21
  • unix21
  • 2016年12月15日 13:13
  • 667

Linux下Tomcat开机自动启动——wangli61289

关闭 wangli61289的专栏 Linux下Tomcat开机自动启动 标签: Linuxtomcatshell启动 Linux下tomcat开机自...
  • ma15732625261
  • ma15732625261
  • 2017年10月25日 21:03
  • 262

Windows下开机自启动Tomcat7

问题:tomcat7解压版,通过startup.bat手动启动tomcat后会出现对话框,如果机器意外重启,tomcat还需要手动重启,比较麻烦。解决:将tomcat安装成系统服务,设置启动方式为自启...
  • zhenzhendeblog
  • zhenzhendeblog
  • 2016年08月11日 10:32
  • 8281

JAVA定时执行任务(Tomcat 下的定时任务)

2013-02 Tomcat 下的定时任务 SysContextListener.java package axtic.servlet; import java.util....
  • fishineye
  • fishineye
  • 2016年08月09日 21:56
  • 2227

tomcat宕机自动重启和每日定时启动tomcat【工具包系列】

在项目后期维护中会遇到这样的情况,tomcat在内存溢出的时候就出现死机的情况和遇到长时间不响应,需要人工手动关闭和重启服务,针对这样的突发情况,希望程序能自动处理问题而不需要人工关于,所以才有了目前...
  • LOVELONG8808
  • LOVELONG8808
  • 2016年07月28日 10:24
  • 10019
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tomcat自动启动后台任务
举报原因:
原因补充:

(最多只允许输入30个字)