java - 尝试使用 @Value 从属性文件设置 @Scheduled 的 cron 属性,但出现编译时错误
问题描述
我一直在尝试将@Scheduled 的 cron 属性设置如下。
public class ObjectScheduler {
@Value("${config.cron.expression}")
private static final CRON_EXPRESSION;
@Scheduled(cron = CRON_EXPRESSION, zone="GMT")
public void scheduledObjectFetch() {...}
}
我在这里遇到编译时错误说
The value for the annotation attribute Scheduled.cron attribute must be a constant expression.
如果我直接在属性中给出表达式,同样的事情
@Scheduled(cron = "${config.cron.expression}", zone="GMT")
这里的值也是在运行时从配置中分配的,那么为什么它不在这里给出编译时错误呢?为什么当我使用 @Value 注释将它分配给一个变量时,它不认为它是一个常量表达式?有什么我想念的吗?是因为 Java 还是 Spring 的 @Value 注解?
解决方案
@Value
尽管可以通过 setter 完成,但 Spring 不会插入静态字段。
这也适用于static final
需要在编译时定义的字段。
所以你不能通过配置CRON_EXPRESSION
,@Value
它只有在你设置硬编码的情况下才能工作:
private static final String CRON_EXPRESSION = "0 0 8 * * ?";
@Scheduled(cron = CRON_EXPRESSION, zone="GMT")
public void scheduledObjectFetch() {...}
推荐阅读
- c# - 从 Newtonsoft jObject 中提取属性
- android - 带有 Volley 的 Android MVP
- .htaccess - 无法让简单的 .htaccess 重定向工作
- c++ - VS 2019 社区中的 Boost Multiprecision bad_lexical_cast 链接器错误
- c# - 如何找到正在插入的表的索引
- python - 如何使用其主要因素和多重性获得输入的所有除数?
- python - 为什么将映射函数的结果分配给一个变量与将其分配给多个变量不同?
- html - “按钮”的 Div 位置取决于内容高度
- python - 如何设置 nginx 占用云端 url 而不是后端服务器的代理通行证?
- mongodb - 为什么 mongo 建议最大调度优先级为 30?