java中服务器启动时,执行定时任务

package com.ripsoft.util;

import java.util.Calendar;
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TimerListener implements ServletContextListener{
    private Timer timer = null;  

    @Override
    public void contextInitialized(ServletContextEvent event) {
        timer = new Timer(true);
        event.getServletContext().log("定时器已启动");  

      //设置执行时间
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);//每天
        //定制每天的11:00:00执行
        calendar.set(year, month, day, 11, 00, 00);
        java.util.Date date = calendar.getTime();
        int period = 30 * 1000;
        //每天的date时刻执行TestTask,每隔30秒重复执行
        timer.schedule(new TestTask(), date, period);
        //每天的date时刻执行TestTask, 仅执行一次
        //timer.schedule(new TestTask(), date);
    }  

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        if (timer != null) {
            timer.cancel();
            event.getServletContext().log("定时器销毁");
        }
    }
}
package com.ripsoft.util;

import java.util.TimerTask;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TestTask extends TimerTask{
    protected final Log logger = LogFactory.getLog(getClass());  

    private static boolean isRunning = false;  

    @Override
    public void run() {
        if (!isRunning) {
            isRunning = true;
            logger.info("开始执行任务。");  

            int i = 0;
            while (i++ < 10) {
                logger.info("已完成任务的" + i + "/" + 10);
            }  

            isRunning = false;
            logger.info("任务执行结束。");  

        } else {
            logger.info("上一次任务执行还未结束,本次任务不能执行。");
        }  

    }
}

1.TestTimerListener.java执行定时任务,实现servlet的ServletContextListener接口,当服务器启动时开始执行TestTask任务

2.想要任务在服务器启动时定时执行,就要借助监听实现需要在web.xml中做如下配置

    <listener>
        <listener-class>com.ripsoft.util.TimerListener</listener-class>
    </listener>
时间: 2024-08-13 10:07:15

java中服务器启动时,执行定时任务的相关文章

Servlet中的init()方法如何才会在服务器启动时执行

如果要想让 servlet 的 init () 方法在服务器启动 时就被执行,则需要在 web.xml 中相应的 servlet 下配置 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.

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

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

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

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

java中如何生成可执行的jar文件

java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$myAct ionListener.class CardLayoutDemo.class myClosingListener.class myPanel.class jar命令为java自带的专用打包工具: c代表生成新的jar包: e代表可执行的类,亦即main方法所在的类.如果该类有所属的包,书

服务器启动时卡死在启动画面

服务器启动时可能会一直卡在启动画面的进度条,始终无法进入登录界面. 本人就遇到过这种情况,稍老的国产存储服务器,由于公司搬家搬动过程中可能有些小震动,开机时就一直卡在启动进度条. 本人先是判断系统出了问题,就还原到之前用Windows Server Backup备份的系统,结果还是同样的问题,然后就考虑到可能是系统硬件上有些问题,打开机盖,除了灰尘,重新插拔了内存条,再次开机,OK,成功出现久违的登录界面. 遇到这种问题的处理,可能就需要打开一些思路,不过系统的日常备份工作也是非常重要的,一定要

Java中字符串比较时==和equals的区别

==是比较两个字符串引用的地址是否相同,即是否指向同一个对象,而equals方法则比较字符串的内容是否相同. 例如String a = "abc"; String b = "abc"; a == b返回true,a.equals(b)同样返回true,这是为什么呢? 原来程序在运行时有一个字符串池,创建字符串时会先查找池中是否有相应的字符串,如果已经存在的话只需把引用指向它即可,如果没有则新建一个. 上例中创建a时,会在字符串池中首先创建一个"abc&qu

如何查看apache服务器启动时加载了哪些模块

查看apache服务器编译时所加载的模块 [[email protected] bin]# ./apachectl -lCompiled in modules:  core.c  mod_authn_file.c  mod_authn_default.c  mod_authz_host.c  mod_authz_groupfile.c  mod_authz_user.c  mod_authz_default.c  mod_auth_basic.c  mod_filter.c  mod_versi

JAVA中代码段的执行顺序

我记得刚毕业那时候,学习JAVA最怕的就是这儿了,关于这的JAVA题,我一向都做不对.今天终于复习到这了,看了好半天,得赶紧把刚才学习到的那点东西记下来. 一.关于static的代码段执行顺序 执行结果如下: Cup(1) Cup(2) Cups() Cups() Inside main() f(99) 二.关于非static得代码段执行顺序 执行结果如下: Inside main() Mug(1) Mug(2) c1 & c2 initialized Mugs() Mug(1) Mug(2)

java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况

/* 样例1: class Parent{ int num = 3; } class Child extends Parent{ int num = 4; } */ /* 样例2: class Parent{ } class Child extends Parent{ int num = 4; } */ /* 样例3: class Parent{ void show(){ System.out.println("Parent Show!"); } } class Child exten