簡體   English   中英

將變量傳遞給@Value 注釋以從屬性文件中讀取特定屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM