[英]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 有時可能需要一天或半天才能解決;)。
這是我所做的:
將屬性添加到屬性或 YAML 文件
確保使用 @EnableAutoConfiguration 或 @SpringBootApplication 注釋主類
創建可以在其中使用 @Value 的 AppConfig
@Value("${PROPERTY}") 私有字符串 URL;
在類級別使用 @Configuration 注釋此 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
、 .mvn
、 target
、 .project
並將項目重新導入到 eclipse 中對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.