使用Java调度任务以每X天运行一次或仅执行一次

时间:2015-09-18 15:27:51

标签: java quartz-scheduler schedule

这里有stackoverflow和Java初学者。

所以我试图在我的应用程序中实现调度程序。我希望某个进程/作业每隔X个时间运行一次或只运行一次。这个时间需要是可配置的,所以我创建了一个简单的Schedule对象,其中包含lastExecutedlastExecuted,频率和getter的枚举以及setter等字段。

现在,很容易让它每隔X天执行一次任务 - 我只是使用了Groovy的TimeCategory并创建了一个不断运行的线程并检查{{1}之间的时间当前时间超过frequency enum

Schedule中指定的时间

问题 - 如何处理月份?如果我将频率设置为每月如何处理不同的月份长度?我想,另一种选择是每个月都有一个大的switch语句。但这似乎不是一个很好的解决方案。是否可以以更优雅的方式执行此操作(最好不使用任何其他库或弃用的Java方法,例如Date&#39的getDay()方法等。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用日历类,即在每个月的第1天安排一些事情:

Calendar now = Calendar.getInstance();

now.set(Calendar.DAY_OF_MONTH, 1);


for (int i = 0; i < 10; i++)
{
     now.add(Calendar.MONTH, 1);
     scheduler.scheduleAt(now); // or whatever you are using to schedule
}

答案 1 :(得分:0)

虽然不推荐使用Date.getDay,但如果您阅读Javadoc on Date,则会指向弃用的替换方法。

在这种情况下,您可能希望使用Calendar类来检索日期和时间信息。