当前位置: 首页 > 知识库问答 >
问题:

在Spring MVC中使用@计划注释中的常量表达式Java

裴昕
2023-03-14

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

在下面的代码中,我试图计算@PostConstruct注释中的初始延迟。但是,当我尝试在@Sched的注释中使用变量时,会收到以下错误消息:注释属性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();
}

我不能插入"delayUntilNextTime"到@Sched的初始化Delay参数中。我想知道是否有人能给我指出如何绕过这个问题的正确方向。

我试图使delayUntilNextTime成为一个静态的最终(常数),但它仍然不起作用。我也尝试了字符串变体“初始延迟字符串”,但那也不起作用。

共有1个答案

司马耘豪
2023-03-14

使用系统。setProperty(“DelayUntinextDay”,DelayUntinextHour.toString())initialize()方法中,并使用@Value(${delayuntinextday}”)访问该值

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

我没有试过上面的代码。

 类似资料:
  • 静态编程语言允许注释表达式。然而,尚不清楚这些注释如何有用以及如何使用它们。 假设在下面的示例中,我想检查一下,该字符串包含@MyExpr注释中指定的数字。这能实现吗?如何实现?

  • 我最近一直在研究静态编程语言lang及其与java的互操作。我有以下java代码: 其中编写如下: Java编译器说常数1和常数2必须是常数,但我不知道如何使它们比现在更恒定。所以我的问题是:如何在java swicth语句中使用kotlin中的常量? 我用的是jdk8和kotlin M14。

  • 我正在尝试使用Enunciate为我的REST API生成静态文档,该API是使用Spring MVC 3.2用Java编写的。Enuncite网站声称,它通过使用以下特定插件来支持Spring: http://enunciate.codehaus.org/module_spring_app.html 在查看配置选项时,看起来我应该导入一个spring applicationContext.xml

  • 如何计算方面中的Spring Security表达式?我想我可以很容易地使用完成这项工作的类I spring框架

  • 长话短说: 是否有一种方法可以将生成的字符串解释为注释中的SpEL表达式,而不使用转换器,例如)? 我认为将被宏展开,然后由计算为对应的SpEL表达式,上面示例中的。不幸的是,情况并非如此,加载Spring上下文会导致一个错误,说明它无法将字符串(属性的值)转换为目标类型。 现在,我通过编写一个实现的类来解决这个问题,但这非常复杂,因为我需要通过实例化等以编程方式将字符串计算为SpEL表达式。 但

  • 问题内容: 我有一些复杂的正则表达式,为了便于阅读和维护,需要对其进行注释。Java规范相当简洁,为了使它正常工作,我努力了很长时间。我终于抓住了我的错误,并将其发布为答案,但对于保持正则表达式的任何其他建议,我将不胜感激 作为示例,我想在一个简单的名称解析器中注释(patternS的)子组件: 编辑:我也将感谢(?x)格式的示例。 编辑:@ geowa4有一个很好的建议,可以避免嵌入注释。自从J