[英]Passing a variable to @Value annotation for reading specific property from properties file
在我的 Spring boot 應用程序中,需要根據從另一個函數返回的字符串值從屬性文件中讀取特定值。 我的屬性文件如下:
A=value_a
B=value_b
函數返回 A 或 B,並將其存儲在名為stringValue的 String 變量中。 我正在尋找按照以下方式做的事情:
@Value(stringValue)
String propertyValue
但是,我在 IDE 上收到以下消息:
屬性值必須是常量
我試圖將 stringValue 轉換為靜態最終變量,但無濟於事。
我知道我可以傳遞要從屬性文件中讀取的特定鍵,例如:
@Value("${A}")
String valueOfA
我的問題是我是否可以將變量傳遞給 @Value 注釋?
@Value
注釋在啟動期間解析,當 Spring 上下文被構建時。 由於此時stringValue
不可用,因此您不能將其用於注入目的。
這種情況的一個例外是如果帶有@Value
注釋的 bean 是原型范圍的,在這種情況下,它的一個新實例將在任何時候被請求創建。 盡管如此, stringValue
需要可用於 Spring 上下文才能在注入點使用。
沒有看到更多代碼,就不可能給你更詳細的答案。
您可以在應用程序中自動裝配 Environment 並使用它從屬性文件中讀取它應該在運行時的狀態。(這是假設您的屬性所在的所有文件都已添加到環境中)。
由於您尚未使用我要求的所有信息更新您的問題,因此我將根據假設發布我的答案。
所以你的代碼是-
讓我們調用你的類,在那里你調用一個名為 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
}
感謝您的幫助! 我將屬性文件中的值讀入 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);
如果您的變量是另一個環境變量,您可以嘗試這種格式。 @Value("${${stringvalue}}")
其中 stringvalue 是環境變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.