首页 > 解决方案 > 从@Scheduled fixedRate 的属性文件中获取值时出错

问题描述

private static final String CONSTANT = (p.getProperty("MILLISECONDS_OF_12_HOURS"));

@Scheduled(fixedRateString = CONSTANT)
public void clearCache() throws IOException {


    if(!rrcodeService.cachedAccessGroups.isEmpty()) {
        for (Entry<String, CachedAccessGroups> entry : rrcodeService.cachedAccessGroups.entrySet()) {
            String key = entry.getKey();
            CachedAccessGroups accessGroups = rrcodeService.cachedAccessGroups.get(key);
            if(now.getTime() - accessGroups.getCachedDate().getTime()> Integer.parseInt(p.getProperty("EVICT_CACHE"))) {
                rrcodeService.cachedAccessGroups.remove(key);
            }
        }
    }       
}

MILLISECONDS_OF_12_HOURS 的值是在外部属性文件中设置的。我正在尝试将该值设置为 FixedRateString。但是它的抛出错误说“注释属性Scheduled.fixedRateString的值必须是一个常量表达式”任何帮助将不胜感激..谢谢!

标签: javascheduled-tasks

解决方案


您可以从上下文中注入值。就像是

@Scheduled(fixedRate = "${propertykey.myRate}", initialDelay=1000)
public void clearCache() throws IOException {
   .....
}

并在外部定义属性文件(application.properties YAML)

propertykey:
    myRate: 5000

请记住,fixedRate在上面的示例中需要一个long


推荐阅读