Java 使用默认变量设置@Value注释
是否可以使用@Value注释并将变量作为默认值 我有一个变量Java 使用默认变量设置@Value注释,java,spring-boot,spring-annotations,Java,Spring Boot,Spring Annotations,是否可以使用@Value注释并将变量作为默认值 我有一个变量processingYear,我想从属性中读取,如果它无法从属性中读取,我想将当前年份分配到变量中 @Value("${processing_year:2021}") int processingYear; 使用上面特定的代码,我可以从属性文件中读取processingYear,并为其赋值,如果从属性读取失败,变量将设置为2021 但是,我看不到将当前年份指定为默认变量的方法。下面是我的设想,我想看看是否有什么东西
processingYear
,我想从属性中读取,如果它无法从属性中读取,我想将当前年份分配到变量中
@Value("${processing_year:2021}")
int processingYear;
使用上面特定的代码,我可以从属性文件中读取processingYear
,并为其赋值,如果从属性读取失败,变量将设置为2021
但是,我看不到将当前年份指定为默认变量的方法。下面是我的设想,我想看看是否有什么东西可以给它指定一个默认变量
LocalDate date = LocalDate.now();
Locale locale = Locale.US;
int currentYear = Integer.parseInt(date.format(DateTimeFormatter.ofPattern("yyyy",locale)));
@Value("${process_year:currentYear}")
int processingYear;
是的,您可以提供以下服务:
@Value(${processing\u year:5})
国际加工年;
在:
之后提供默认值。这会将默认值5
分配给processingYear
如果要提供其他值,则需要使用#
作为前缀:
@Value($someObj.Value:#{null}})
对象someObj;
@值(“#{${someObject.stringlist:}”.split(',')}”)
收集字符串;
如果需要设置变量,则需要使用@Value
和setter方法:
int处理年份;
@值(${process_year:-1}”)
私有void setProcessingYear(整数年){
如果(年份==-1){
//-1用于标识未传递任何值。因此在本例中,我们使用currentyear。
年份=当前年份;
}
处理年份=年;
}
你可以用@Value
试试这个:
@Value(${currentYear:#{(T(java.time.Year.now().getValue())}}”)
私人国际年;
谢谢@Gautham,我已经试过了,但是由于以下错误消息引起的:org.springframework.expression.spel.SpelEvaluationException:EL1008E:在类型为“org.springframework.beans.factory.config.BeanExpressionContext”的对象上找不到属性或字段“currentYear”—可能不是公共的或无效的?
字段currentYear
已经是公共的,而currentYear
和processingYear
都是全局变量。@PoonJP我已经更新了答案。在您的情况下,您需要使用setter方法和@Value
谢谢。我以前也有类似的例子,但我想看看是否有什么可以使用@value注释简化的地方。不确定是否可以直接使用字段来简化。使用setter可能是最好的选择,因为您可以轻松调试以分析任何问题如何设置private String month代码>到“二月”?