java - Java Spring MVC 中@Scheduled 注解中常量表达式的使用

标签 java spring spring-mvc

我正在使用 Spring MVC,我正在尝试编写一个每小时运行的计划任务。问题是,当应用程序启动时,它应该计算到下一小时的持续时间,并使用该值作为初始延迟。这样,计划任务就可以在精确的时间运行,例如下午 1 点...2 点...3 点等。

在下面的代码中,我尝试计算 @PostConstruct 注释内的初始延迟。但是,当我尝试在 @Scheduled 注释中使用变量时,收到以下错误消息:注释属性 Scheduled.initialDelay 的值必须是常量表达式

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();
}

我无法将“delayUntilNextHour”插入到@Scheduled 的initialDelay 参数中。我想知道是否有人可以为我指明如何解决这个问题的正确方向。

我尝试将delayUntilNextHour设置为静态最终(常量),但它仍然不起作用。我也尝试过字符串变体“initialDelayString”,但这也不起作用。

最佳答案

initialize() 方法中使用 System.setProperty("delayUntilNextDay", delayUntilNextHour.toString()); 并使用 @Value("${ delayUntilNextDay}") 来访问该值

@Scheduled(initialDelay= @Value("${delayUntilNextDay}"), fixedRate=3600000) //Runs every hour
public void test(){
    //ADD LOGIC 
    hourMap.clear();
}

我还没有尝试过上面的代码。

关于java - Java Spring MVC 中@Scheduled 注解中常量表达式的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47449359/

相关文章:

javascript - 在 jquery 中访问 Spring MVC 模型对象

Spring 异常 : MethodArgumentTypeMismatchException

java - 在 Spring MVC 中使用 Ajax 和 SimpleFormController

java - Spring 3 绑定(bind)多个请求参数到一个对象

java - 空白页面作为 servlet 中的输出出现

java - 如何在spring的mongo模板中编写这个聚合查询

java - Spring @Async 被忽略

java - 如何在Web Service Rest中获取数组JSON?

java - Spring Boot 和 Java java.lang.OutOfMemoryError : GC overhead limit exceeded

java - 为什么多个 nextInt() 有效?