Java 使用默认变量设置@Value注释

Java 使用默认变量设置@Value注释,java,spring-boot,spring-annotations,Java,Spring Boot,Spring Annotations,是否可以使用@Value注释并将变量作为默认值 我有一个变量processingYear,我想从属性中读取,如果它无法从属性中读取,我想将当前年份分配到变量中 @Value("${processing_year:2021}") int processingYear; 使用上面特定的代码,我可以从属性文件中读取processingYear,并为其赋值,如果从属性读取失败,变量将设置为2021 但是,我看不到将当前年份指定为默认变量的方法。下面是我的设想,我想看看是否有什么东西

是否可以使用@Value注释并将变量作为默认值

我有一个变量
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到“二月”?