是否可以在 Spring 的 @Value 注释中将键作为默认值传递

Is it possible to pass a key as default value in @Value annotation of Spring

我有这样一种情况,我们正在从属性文件中读取一个 属性,现在我们被要求指向另一个端点,一段时间以来我们必须管理这两个端点,除非这个新端点经过测试并彻底验证。

我想通过在属性文件中添加这个较新的 属性 来处理这种情况,而在实际的 class 中,我们正在阅读带有 @Value 注释的 属性旧的可以作为默认值传递,其键作为值类似于

@Value("${backend.endpoint:${older.endpoint}}")。可能吗?

你可以这样使用它。 (本人没做过,如有错误请见谅)

@Configuration
public class PropertyConfiguration {

    @Value("{'${backend.endpoint:${older.endpoint:}}'}")
    private String myValue;
}

这个@Value注解使用backend.endpoint,如果提供的话默认为older.endpoint,如果没有提供backend.endpoint。 如果两者都没有提供,则 属性 必须设置为 null.

还有其他方法可以解决这个问题。可能,在代码中对 属性 和 handle 使用 @Value

可以的,我已经测试过了,我的示例代码

代码:

@Value("#{ ${spring.myapp.usenewval}  ? '${spring.myapp.newval}' : '${spring.myapp.oldval}}'}")
private String message;

属性

spring:
  myapp:
    usenewval: false
    newval: hello
    oldval: world.....

您始终可以像

一样从外部设置 spring.myapp.usenewval
java -jar -Dspring.myapp.usenewval=true myapp.jar

这是为您快速解决的问题。请参考。

您可以将默认值设置为 @spring 的值注释,如下所示。

@Controller
@RequestMapping(value = "/your path")
public class MyController {

    @Value("${key:true}")
    private boolean booleanWithDefaultValue;

}

在这里,我使用布尔变量并将默认值设置为"true"。

希望这个解决方案有效。