我想知道安排代码的最佳方法。我有一个代码,可以生成报告,并每隔24小时将邮件发送给一组人。它是一个基于控制台的Java应用程序。我想知道最好的安排时间的方法。有时我可能需要将其更改为12小时间隔。但是,应用程序在两次间隔之间不会执行任何其他任务。
这里有几种方法,从最简单到最全面:
sleep()
:TimeUnit.HOURS.sleep(24)
这种方法很简单,可以做24小时的工作和睡眠。实际上,这有点复杂,因为报告生成需要一些时间,因此您必须睡得更短。下面的所有解决方案都可以透明地进行处理。
java.util.Timer#scheduleAtFixedRate()
-简单的内置Java解决方案。
@Scheduled
注释在春季或@Schedule
在EJB -更复杂也更强大,如接受的cron表达式:
@Scheduled(fixedRate=DateUtils.MILLIS_PER_DAY)
public void generateReport() {
//…
}
quartz-scheduler-具有集群和故障转移,失火处理,全面的cron支持等功能的全面Java调度程序。非常全面:
newTrigger().
withSchedule(
simpleSchedule().
withIntervalInHours(24).
repeatForever()
).build();
要么
newTrigger().
withSchedule(
cronSchedule().
dailyAtHourAndMinute(17, 30). //17:30
).build();
问题内容: 当前返回: ‘25:59:59’ 我希望它返回: ‘01:59:59’ 我知道一个简单的问题,但我不知道如何告诉MySQL这样做而不是25小时后返回。有任何想法吗? 问题答案: 不知道这是否是最好的解决方案,但似乎可行:
问题内容: 我有一个将a解析为: 当我解析这个: 结果将是,当使用时: 8月29日 2011 00:44:00 当然,这应该是: 8月29日 2011 12:44:00 当我解析这个: 然后结果如预期的那样: 8月29日 2011 13:44:00 我怎样才能解决这个问题? 问题答案: 使用代替小时模式:
如果我的时间单位为秒,且在86400/20=4320次循环后循环持续时间为20秒,则24小时已过去。 这个问题是否有一个优雅的解决方案,或者我真的必须切换所有类型的大小写?我知道这不会经常发生,但是如果在未来引入新的类型,代码必须适应:) 我也在考虑使用方法,并依赖于返回类型的顺序,通过检查输入单元在其中的位置,知道通过哪个常数(1000L、60L等),我可以自己计算循环数,而无需任何,等方法,但
问题内容: 我现在想在时间戳上添加24小时。如何找到24小时的Unix时间戳号,以便现在可以将其添加到时间戳中? 我还想知道如何将48小时或多天添加到当前时间戳。 我如何才能最好地做到这一点? 问题答案: 您可能需要增加一天而不是24小时。由于夏令时(在其他情况下),并非整天都有24小时:
我得到一个变量字符串,如下所示: 上午8点45分 如果是下午,则希望将其转换为24小时制。这样我就可以放下am/pm,用它来做别的事情。 我可以像这样轻松地放弃am/pm: 当然,如果我这样做,我不知道字符串是am还是pm,所以我不知道在字符串上加上12小时,使它成为24小时。 有人知道我该如何解决这个问题吗?我绝对无法更改我得到的变量输入,它将始终是小时(在 12 小时内)、分钟和 am 或 p
问题内容: 我从服务器获得的时间就像 。 我想将其转换为。 我还希望转换后的时间为24小时格式。任何人都可以解决这个问题。我想得到的输出就像 问题答案: 试试这个: