在我的Spring启动应用程序中,需要从属性文件中读取特定值,具体取决于从另一个函数返回的字符串值。我的属性文件如下:
A=value_a
B=value_b
函数返回A或B,并将其存储在名为 stringValue 的String变量中。我正在寻找以下几点做的事情:
@Value(stringValue)
String propertyValue
但是,我在IDE上收到以下消息:
属性值必须是常量
我试图将stringValue转换为静态最终变量,但无济于事。
我知道我可以传递一个特定的密钥来从属性文件中读取,例如:
@Value("${A}")
String valueOfA
我的问题是我是否可以将变量传递给@Value注释?
答案 0 :(得分:4)
@Value
注释在解析期间得到解决。由于此时stringValue
不可用,因此您无法将其用于注入目的。
此场景的一个例外是,如果带有@Value
注释的bean是原型范围的,在这种情况下,只要请求它就会创建它的新实例。但是,stringValue
需要可用于Spring上下文才能在注入点使用。
如果没有看到更多代码,就无法给出更详细的答案。
答案 1 :(得分:1)
您可以在应用程序中自动装配环境,并使用它来读取属性文件,因为它应该在运行时。(这假设所有文件都将您的属性添加到环境中)。
我将以假设发布我的答案,因为您没有更新您的问题,并提供了我要求的所有信息。
所以你的代码是 -
让我们调用你的类来调用一个名为getValue的函数来获取stringValue- Example的值。现在假设您正在调用doSomething()类的方法中的函数getValue。
class Example{
@Autowire
private Enviornment environment.
private String propertyValue
public void doSomething(){
String value=getValue()// this is where u know whether
its A or B.
propertyValue=environment.getProperty(value);
// do whatever u want know
}
答案 2 :(得分:1)
感谢帮帮!我将属性文件中的值读入org.springframework.core.io.Resource对象,然后使用它来检索我需要的特定值。以下是我构建解决方案代码的方式:
@Value("classpath:config.properties")
private Resource propertiesfile;
然后,我声明了一个java.util.Properties对象,并将Resource对象中的值读入其中。
Properties properties = new Properties();
try{
properties.load(propertiesfile.getInputStream());
}catch(IOException e){
logger.error("Parsing error while reading properties file",e.toString());
}
最后,根据我的 stringValue 变量中的值,我从属性文件中读取相应的值
String propertyValue = properties.getProperty(stringValue);
答案 3 :(得分:0)
如果您的变量是另一个环境变量,您可以尝试这种格式。 @Value("${${stringvalue}}")
其中 stringvalue 是环境变量。