java定时任务

背景:被分配了一个将告警邮件整合,定时发送的任务。之前动不动就N封告警过来,现在改成1小时一封整合邮件。

过程:先是去百度了下java定时任务有哪些写法(最近翻墙因某种原因大量关闭)。

           搜到了很多方法,因为需要改的项目使用的原生java代码,所以放弃了使用spring框架的方法。

           任务比较简单,最后选了最简单的实现方法(Timer,TimerTask)。

内容:其实代码只要搬过来,实现自己定时运行的逻辑就好了,这里只是简单介绍下。

           总共有3个部分:1.监听器(Listener) 2.定时任务管理器(TimerManager) 3.定时任务(TimerTask)

           监听器的作用是用来触发定时任务管理器(毕竟是个javaweb项目);

           定时任务管理器顾名思义就是管理各个定时任务的,主要是给定时任务分配一个启动时间,运行间隔等条件;

           定时任务则是具体执行定时逻辑的地方了。


代码:

           监听器省略了,就是在Listener的contextInitialized()方法里new个TimerManager对象

1.定时任务管理器

public class TimerManager {
    // 时间间隔 1小时
    private static final long PERIOD_HOUR = 60 * 60 * 1000;

    public TimerManager() {
        Calendar calendar = Calendar.getInstance();	
        // 这里设置下一个整点时间 是为了让服务启动后在下一个整点在执行第一次定时任务        
	// 下一个整点时间
        calendar.set(Calendar.HOUR_OF_DAY, (calendar.get(Calendar.HOUR_OF_DAY) + 1));
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.MILLISECOND, 0);

        // 第一次执行定时任务的时间
        Date date = calendar.getTime();

        Timer timer = new Timer();

        TestTimerTask task = new TestTimerTask();
        // 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
        timer.schedule(task, date, PERIOD_HOUR);
    }
}
 

2.定时任务

public class TestTimerTask extends TimerTask {

    public TestTimerTask() {
    }

    @Override
    public void run() {
        // ....具体实现逻辑的地方
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值