Spring Boot application.properties能否以值为键名?如何用@Value解析?
Spring Boot配置项键名使用占位符的可行性及@Value使用说明
1. 配置写法是否可行?
不行。Spring Boot的application.properties配置文件中,配置项的键名不支持使用${}占位符动态替换。
Spring加载配置的逻辑是先扫描并确定所有配置项的键名,之后才会解析值中的占位符。你示例里的${value} = another Value,Spring会把${value}当成一个固定的键名,而不会将它替换成a.property的值value。
2. 如何用@Value解析a.property?
如果只是要读取a.property的配置值,直接使用@Value注解即可,写法很简单:
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class MyComponent { @Value("${a.property}") private String myProperty; // 后续可直接使用myProperty变量,它的值就是配置里的"value" }
替代方案(若需动态键名的配置)
如果你的需求是根据某个配置值来读取对应的另一个配置,可以通过Environment对象手动实现:
import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @Component public class MyDynamicComponent { private final Environment environment; public MyDynamicComponent(Environment environment) { this.environment = environment; } public String getDynamicValue() { // 先获取a.property的值作为目标键名 String targetKey = environment.getProperty("a.property"); // 根据目标键名读取对应配置值 return environment.getProperty(targetKey); } }
调用getDynamicValue()就能拿到another Value的值,前提是配置文件要写成:
a.property = value value = another Value
内容的提问来源于stack exchange,提问作者Anvesh Raavi
相关产品推荐
相关产品推荐

