每天、每周、每月和每年调用一个方法
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分钟执行一次