我想以编程方式通过 Spring
@Value(...)
注释读取值。在 @Value(...)
注解后面以编程方式调用 Spring 代码。
我在本主题中找到的所有示例都解释了如何将新的
*.properties
文件添加到 Spring 上下文中。但就我而言,我使用外部键/值存储,Hashicorp consul
,我想从这个外部 KV 存储读取值。 Spring注释工作正常。它正确读取 consul
中的值。
从应用程序的角度来看,我的代码必须是透明的。我不想在我的项目中看到任何与
consul
相关的代码,如下所示:
ConsulClient consulClient = null;
consulClient.getKVValue("key").toString();
如果我更改应用程序背后的KV存储,我不想修改Java代码。
如果可能,我想以编程方式调用
@Value(...)
注释后面的 Spring 代码,并以标准 Spring 方式获取键的值。
为了以编程方式从 Spring 中的属性文件加载值,您可以使用
Environment
bean(请参阅 javadoc)
为此,只需自动装配 bean,并使用
getProperty()
方法:
@Component
public class Foo {
@Autowired
private Environment environment;
public void yourMethod() {
String value = this.environment.getProperty("key");
// do whatever
}
}