转自:http://www.2cto.com/kf/201311/260676.html

在开发J2EE项目中,有时候需要在后台定时执行一些代码。

比如定时对web数据建立倒排索引、定时发送邮件、定时写日志文件。

首先需要继承TimerTask类,覆盖run()方法,将需要定时执行的业务代码写在这个run()方法中:

[java] 
import java.util.Date;  
import java.util.TimerTask;  
  
public class DisplayDate extends TimerTask {  
  
    @Override  
    public void run() {  
        // TODO Auto-generated method stub  
        try {  
            System.out.println(new Date());//定时打印当前时间  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
    }  
      
}  
 
然后需要另外一个类实现ServletContextListener 接口,这个接口能够监听web应用的生命周期。当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent事件的两个方法:
contextInitialized(ServletContextEvent sce) :当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。
contextDestroyed(ServletContextEvent sce) :当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。
 
[java]  
import java.util.Timer;  
  
import javax.servlet.ServletContextEvent;  
import javax.servlet.ServletContextListener;  
  
public class AutoRun implements ServletContextListener {  
      
    private Timer timer = null;  
  
    public void contextInitialized(ServletContextEvent arg0) {  
        // TODO Auto-generated method stub  
        timer=new Timer(true);  
        timer.schedule(new DisplayDate(),0,1000*3);//延迟0秒,每3秒执行一次DisplayDate()  
    }  
      
    public void contextDestroyed(ServletContextEvent arg0) {  
        // TODO Auto-generated method stub  
        timer.cancel();  
    }  
  
}  
 
    最后就是在web.xml文件中配置,使得该监听器起作用:
<listener>  
     <listener-class>com.hh.autorun.AutoRun</listener-class>  
  </listener>  
 
    完成以上步骤以后,当你启动服务器软件,如tomcat,后台就会定时运行任务了

J2EE项目中后台定时运行的程序的更多相关文章

  1. 在windows中:双击运行Python程序、后台运行Python程序

    在windows中:双击运行Python程序.后台运行Python程序 安装Python解释器的windows环境,如果双击运行*.py的文件,会闪退.怎样避免闪退呢? 我们用python的日志输出程 ...

  2. J2EE项目中异常处理

     为什么要在J2EE项目中谈异常处理呢?可能许多java初学者都想说:“异常处理不就是try….catch…finally吗?这谁都会啊!”.笔者在初学java时也是这样认为的.如何在一个多层的j2e ...

  3. 如何在Linux中使用Firejail运行应用程序

    有时您可能希望使用在不同环境中未经过良好测试的应用程序,但您必须使用它们.在这种情况下,关注系统的安全性是正常的.在Linux中可以做的一件事是在沙箱中使用应用程序. “沙盒”是在有限环境中运行应用程 ...

  4. 在 Sublime Text 2 中编译和运行 Java 程序,以及输出中文出错问题解决办法

    Sublime Text 2 是我最喜欢用来编码的文本编辑器,如果你尝试使用后相信你也会喜欢上它的.在这篇文章中我们将讨论如何在 Sublime Text 2 中编译和运行 Java 程序. 第一步: ...

  5. Python中四种运行其他程序的方式

    原文地址:http://blog.csdn.net/jerry_1126/article/details/46584179 在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在 ...

  6. Python黑科技 | Python中四种运行其他程序的方式

    在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32proc ...

  7. 在CentOS 6 的cron/crontab中使用wine运行exe程序

    几个月前服务器的OS从Ubuntu 10.04转为CentOS 6.3,装好wine后手动运行shell脚本可以正常运行指定的exe程序(脚本和Ubuntu中的一样),于是就直接修改crontab定时 ...

  8. 利用python制作在Linux服务器后台定时运行的任务-邮件提醒

    1. 自动任务的功能为: 定时扫描数据库中的记录,然后发邮件 代码如下 scheduleMail.py import pymysql import smtplib from email.mime.te ...

  9. Ubuntu中使用终端运行Hadoop程序

    接上一篇<Ubuntu Kylin系统下安装Hadoop2.6.0> 通过上一篇,Hadoop伪分布式基本配好了. 下一步是运行一个MapReduce程序,以WordCount为例: 1. ...

随机推荐

  1. Cocos2d-x 3.x 错误 cocos2dxDownloader 编译报错

    因为自带的库不是自己写的代码,所以报错的当时就傻了 报错文件为Cocos2dxDownloader.java 错误铺满全屏,仔细查看发现是类的调用有问题,翻到最上边发现是有几个(很多个)类没有定义,我 ...

  2. 手机web——自适应网页设计(html/css控制)

    一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的? 其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name=" ...

  3. sql中的跨库查询

    在sql查询时,需要关联2个服务器上的不同数据库,只需要在所需查询的表名前加上服务器地址即可. 例如:在 192.168.0.15,8020的db110库 和 192.168.0.150,8082的d ...

  4. Hibernate的save()和persist()的区别

    hibernate之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯.另一方面,save()和 persist()方法还有一个区别:使用 save() ...

  5. html/京东项目/京东网页高仿/js/jq/css/java web/

    登录部分HTML+CSS: <!DOCTYPE html><html>    <head>        <meta charset="UTF-8& ...

  6. 在 Web 项目中应用 Apache Shiro

    Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证.授权.加密.会话管理等功能.认证和授权为权限控制的核心,简单来说,"认证"就是证明你是谁? Web ...

  7. jdk动态代理实现

    1.jdk动态代理的简单实现类 package com.proxy; import java.lang.reflect.InvocationHandler; import java.lang.refl ...

  8. c++中的引用与指针的区别

    http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...

  9. SQL: ROW_NUMBER

  10. Postgresql Jsonb字段内含数组属性的删除元素操作

    1.创建示例表 create temp table settings as select '{"west": [ {}, {} ]}'::jsonb as value; 2.如下保 ...