JAVA WEB 定时任务TimeTask

该篇文章描述了一个基于Java的Web应用中,使用`web.xml`配置的监听器`SendWsListener`启动定时任务,`TimerManager`负责调度`TimerTaskService`执行文件清理操作。

web.xml

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <listener>
        <listener-class>task.SendWsListener</listener-class>
    </listener>

</web-app>

listener(SendWsListener)

package task;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
 
public class SendWsListener implements ServletContextListener  {
 
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("定时任务已启动");
        new TimerManager();
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("定时任务已销毁");
    }
}

TimerManager

package task;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
 
public class TimerManager {
 
    //时间间6个月
    //private static final long PERIOD_DAY = 6 * 30 * 24 * 60 * 60 * 1000L;

    private static final long PERIOD_DAY = 1000L;

    public TimerManager() {
        Calendar calendar = Calendar.getInstance();
 
        //定制每日7点00执行
        calendar.set(Calendar.HOUR_OF_DAY, 15);
        calendar.set(Calendar.MINUTE, 32);
        calendar.set(Calendar.SECOND, 0);
        //第一次执行定时任务的时间
        Date date = calendar.getTime();
        //如果当前时间已经过去所定时的时间点,则在第二天时间点开始执行
        if (date.before(new Date())) {
            date = this.addDay(date, 1);
        }
        Timer timer = new Timer();
        TimerTaskService task = new TimerTaskService();
        //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
        timer.schedule(task, date, PERIOD_DAY);
    }
 
    // 增加或减少天数
    private Date addDay(Date date, int num) {
        Calendar startDt = Calendar.getInstance();
        startDt.setTime(date);
        startDt.add(Calendar.DAY_OF_MONTH, num);
        return startDt.getTime();
    }
}

TimerTaskService

package task;

import utils.FileCleaner;

import java.util.HashMap;
import java.util.Map;
import java.util.TimerTask;

public class TimerTaskService extends TimerTask {

    @Override
    public void run() {
        try {
            System.out.println("定时任务开始执行");
            //主要业务逻辑
            Map<String, String> maps = new HashMap<>(2);
            maps.put("source", "/root/xxx/source/");
            maps.put("target", "/root/xxx/target/");
            FileCleaner.fileClean(maps);
            //TO DO
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tronhon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值