安排在24小时间隔

Akh*_*iar 3 java multithreading

我想知道安排代码的最佳方法.我有一个代码可以生成报告并以24小时的间隔向一组人发送邮件.它是基于控制台的java应用程序.我想知道安排它的最佳方法.有时我可能需要将其更改为12小时间隔.但是,应用程序不会在间隔之间执行任何其他任务.

Tom*_*icz 6

这里有一些方法,从最简单到最全面:

  1. sleep():

    TimeUnit.HOURS.sleep(24)
    
    Run Code Online (Sandbox Code Playgroud)

    这种方法很简单,做工和睡24小时.实际上它有点复杂,因为报告生成需要一些时间,所以你必须稍微睡一会儿.以下所有解决方案都透明地处理.

  2. java.util.Timer#scheduleAtFixedRate() - 简单的内置Java解决方案.

  3. @Scheduled注释在@Schedule -更复杂也更强大,如接受表达式:

    @Scheduled(fixedRate=DateUtils.MILLIS_PER_DAY)
    public void generateReport() {
      //...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. - 完整的Java调度程序,具有集群和故障转移,失火处理,完整的支持等.非常全面:

    newTrigger().
      withSchedule(
        simpleSchedule().
          withIntervalInHours(24).
          repeatForever()
        ).build();
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    newTrigger().
      withSchedule(
        cronSchedule().
          dailyAtHourAndMinute(17, 30).  //17:30
        ).build();
    
    Run Code Online (Sandbox Code Playgroud)