我想知道安排代码的最佳方法。我有一个代码可以生成报告并每隔 24 小时向一组人发送邮件。它是一个基于控制台的 Java 应用程序。我想知道安排它的最佳方法。有时我可能需要将其更改为 12 小时间隔。但是,应用程序不会在间隔之间执行任何其他任务。
最佳答案
这里有几种方法,从最简单到最全面:
sleep ()
:TimeUnit.HOURS.sleep(24)
这个做法很简单,干活24小时 sleep 。实际上它有点复杂,因为报告生成需要一些时间,所以你必须睡得稍微短一些。以下所有解决方案都会透明地处理此问题。
java.util.Timer#scheduleAtFixedRate()
- 简单的内置 Java 解决方案。
spring 中的 @Scheduled
注释或 ejb 中的@Schedule
- 更复杂但也更强大,例如接受 cron表达式:@Scheduled(fixedRate=DateUtils.MILLIS_PER_DAY) public void generateReport() { //... }
quartz-scheduler - 成熟的 Java 调度程序,具有集群和故障转移、失火处理、完整 cron支持等。非常全面:
newTrigger(). withSchedule( simpleSchedule(). withIntervalInHours(24). repeatForever() ).build();
或
newTrigger(). withSchedule( cronSchedule(). dailyAtHourAndMinute(17, 30). //17:30 ).build();
关于java - 每隔 24 小时安排一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9618027/