簡體   English   中英

Spring @Value 未解析為屬性文件中的值

[英]Spring @Value is not resolving to value from property file

我以前在其他一些項目中做過這個,我只是重新做同樣的事情但由於某種原因它不起作用。 Spring @Value不是從屬性文件中讀取,而是從字面上獲取值

AppConfig.java

@Component
public class AppConfig
{
    @Value("${key.value1}")
    private String value;

    public String getValue()
    {
        return value;
    }
}

應用上下文.xml:

<context:component-scan
    base-package="com.test.config" />
<context:annotation-config />

<bean id="appConfigProperties"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:appconfig.properties" />
</bean>

appconfig.properties

key.value1=test value 1

在我的 controller 中,我有:

@Autowired
private AppConfig appConfig;

該應用程序啟動得很好,但是當我這樣做時

appConfig.getValue()

它返回

${key.value1}

它不會解析為屬性文件中的值。

想法?

我還發現@value不起作用的原因是, @value需要PropertySourcesPlaceholderConfigurer而不是PropertyPlaceholderConfigurer 我做了同樣的更改,它對我有用,我使用的是 spring 4.0.3 版本。 我在配置文件中使用以下代碼進行了配置 -

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

就我而言,不會注入靜態字段。

問題是由於我的 applicationContext.xml 與 spring-servlet.xml 中的問題 - 這是 bean 之間的范圍問題。

pedjaradenkovic 好心地向我指出了一個現有資源: @Controller 類中的 Spring @Value 注釋未評估屬性文件中的值,並且Spring 3.0.5 未評估來自屬性的 @Value 注釋

就我而言,我缺少花括號。 我有@Value("foo.bar") String value而不是正確的形式@Value("${foo.bar}") String value

對於 Sprig-boot 用戶,PropertyPlaceholderConfigurer 和 Spring 3.1 中添加的新 PropertySourcesPlaceholderConfigurer。 所以訪問屬性文件很簡單。 只需注入

注意:確保您的屬性不能是Static

@Value("${key.value1}")
private String value;

我正在使用 spring boot,對我來說將版本從1.4.0.RELEASE升級到1.5.6.RELEASE解決了這個問題。

就我而言,我有 lombok @AllArgsConstructor 並且它也獲取了該屬性。 刪除此注釋解決了問題。

閱讀 pedjaradenkovic 的評論。

除了他提供的鏈接之外,這不起作用的原因是@Value處理需要PropertySourcesPlaceholderConfigurer而不是PropertyPlaceholderConfigurer

請注意,如果您的代碼庫中有多個application.properties文件,請嘗試將您的值添加到項目的屬性文件中。

您可以檢查項目的pom.xml文件以識別當前項目的父項目是什么。

或者,嘗試使用environment.getProperty()而不是@Value

@Value 有時可能需要一天或半天才能解決;)。

這是我所做的:

  1. 將屬性添加到屬性或 YAML 文件

  2. 確保使用 @EnableAutoConfiguration 或 @SpringBootApplication 注釋主類

  3. 創建可以在其中使用 @Value 的 AppConfig

    @Value("${PROPERTY}") 私有字符串 URL;

在類級別使用 @Configuration 注釋此 AppConfig

  1. 到目前為止,設置已完成 通過自動裝配 AppConfig,您可以隨時隨地使用它

示例:在某些服務中 @Autowired 私有 AppConfig appConfig; 並在此服務的方法中調用 appConfig.getUrl() 以從屬性文件中獲取屬性 URL 的值。

注意:不要試圖在服務的構造函數中獲取值,它將為空。

我的原因是導入了錯誤的dependency 我無意中從lombok導入了它,而不是"import org.springframework.beans.factory.annotation.Value;" 改回來解決了問題

對我來說,這是由於 Intellij IDEA 中的資源文件夾未標記為“Resources Root”。 只需右鍵單擊資源目錄->“將目錄標記為”->“資源根目錄”。

事情對我不起作用的原因是因為我設置了 2 個 PropertyPlaceholderConfigurer bean 實例(在一大組 spring 配置中)。 一旦設置了一個,另一個就完全沒用了。 這可能是一件非常明顯的事情,但對我來說並非如此。 我不明白為什么 PropertyPlaceholderConfigurer 的第二個實例在創建時不會拋出異常(當已經有另一個實例時)。 而不是默默地忽略第二個實例。 像這樣你可能會得到一個有意義的錯誤。

希望它對那里的任何人都有幫助:.)

對我來說,這是因為我移動了我的項目根文件夾。 我不知道為什么,但是刪除所有文件夾.settings.mvntarget.project並將項目重新導入到 eclipse 中對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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