title: Use of constant expression in @Scheduled annotation in Java Spring MVC
body: <p>I am using Spring MVC and I am trying to write a scheduled task that runs every hour. The catch is that when the application starts up, it should calculate the duration until the next hour and use that value as a initial delay. This way, the scheduled task can run at exact hours like 1pm...2pm...3pm etc.</p>
  
  <p>In my code below, I tried to calculate the initial delay inside of a @PostConstruct annotation. However, when I try to use the variable inside of a @Scheduled annotation, I get the following error message: The value for annotation attribute Scheduled.initialDelay must be a constant expression</p>
  
  <pre><code>private LocalDateTime now;
  private  long delayUntilNextHour;
  private long delayUntilNextDay;
  
  @PostConstruct
  public void initialize(){
  
      now = LocalDateTime.now();
      LocalDateTime nextHour = now.plusHours(1).withMinute(0).withSecond(0).withNano(0);
      delayUntilNextHour = now.until(nextHour, ChronoUnit.MILLIS);
  
  
  }
  
  
  @Scheduled(initialDelay= delayUntilNextHour, fixedRate=3600000) //Runs every hour
  public void test(){
      //ADD LOGIC 
      hourMap.clear();
  }
  </code></pre>
  
  <p>I cannot insert "delayUntilNextHour" into the initialDelay parameter of @Scheduled. I was wondering if anyone can point me in the right direction in how to get around this.</p>
  
  <p>I have tried to make delayUntilNextHour a static final (constant), but it still does not work. I have also tried the string variant "initialDelayString", but that does not work either.</p>