每天、每周、每月和每年调用一个方法

Posted

技术标签:

【中文标题】每天、每周、每月和每年调用一个方法【英文标题】:Calling a method every Day, every Week , every month and every year 【发布时间】:2013-02-08 21:02:34 【问题描述】:

我需要在特定时间自动向我的客户发送报告,例如

每天上午 00:01 每周日上午 00:01 每个月的第一天 每年的第一天

我每天都在这样做:

public void contextInitialized(ServletContextEvent arg0) 

        System.out.println("context initiallized");
        System.out.println("Starting timer");

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 1);
        calendar.set(Calendar.SECOND, 0);

        Date alarmTime = calendar.getTime();

        _timer = new Timer();
        _timer.schedule(new AlarmTask(), alarmTime);
    

这是我执行日常任务的课程:

public class AlarmTask extends TimerTask 

    public void run() 
        // Do your work here; it's 00:01 AM!         
    

当我在凌晨 00:01 之后的任何时间启动 tomcat 时,它似乎工作正常第二天进行...

他们对我的代码有什么问题吗?

【问题讨论】:

【参考方案1】:

你为什么不使用 QuartzSchedular http://quartz-scheduler.org/

【讨论】:

【参考方案2】:

Calendar 模拟完整日期,因此您已在过去安排。 Timer 将通过立即执行来响应。在Calendar 上增加一天。

【讨论】:

【参考方案3】:

你看过Quartz 吗?它可以帮助您安排任务!

【讨论】:

【参考方案4】:

我想你将不得不按照上面所说的 Marko Topolnik https://***.com/a/14781326/2040095

但除此之外,您是否还需要为 Timer 类调用方法“schedule”的 3 参数形式,因为您需要每天发送此报告,而不仅仅是一天?

类似

_timer.schedule(new AlarmTask(), alarmTime, period );

其中 period 是每日报告的 24 小时。

【讨论】:

【参考方案5】:

如果您在大型项目中执行此操作,我更喜欢您转到Quartz Schedular,因为它具有处理作业以及创建和编辑作业的用户界面。如果它只是一个需要定期执行的小警报任务,请创建一个批处理文件并将其添加到chron 作业中以在特定时间间隔运行。

希望这会有所帮助..

【讨论】:

以上是关于每天、每周、每月和每年调用一个方法的主要内容,如果未能解决你的问题,请参考以下文章

AppEngine cron (python) 中的每一天、每周、每月、每年

cron和crontab命令详解 crontab 每分钟每小时每天每周每月每年定时执行 crontab每5分钟执行一次

将每日股票价格变成每周/每月/每季度/学期/每年?

猫鼬日期比较没有时间和按createdAt和staffId分组,每周、每月和每年按聚合计算的员工总数?

项目管理人员每天 每周 每月该干点啥?

一位优秀管理者每天每周每月应该做的,超级实用