簡體   English   中英

從部署時從屬性文件gettng讀取的Spring 3.0 @Value

[英]Spring 3.0 @Value read from property file gettng exception on deployment

我正在嘗試構建一個Spring 3.0應用程序版本3.1.0.RELEASE,我想從其中讀取屬性文件,並在Component類中使用從中讀取的@Value注釋。 為此,我進行了以下更改:在mvc-dispatcher-servlet.xml中:

 <context:property-placeholder location="classpath:mediamonitoring.properties"/> 

組件類:

@Component

公共類SomeHelper {

@Value("${baseUri}")
private String baseUri;

public String getBaseUri() {
    return baseUri;
}

public void setBaseUri(String baseUri) {
    this.baseUri = baseUri;
}
}

屬性:

baseUri:http://localhost:8080/

並且我已經使用@Autowired注釋將此幫助程序類連接到@service類。 當我構建和部署應用程序時,出現以下錯誤:

java.lang.IllegalArgumentException: Could not resolve placeholder 'baseUri'
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)

有什么我想念的東西嗎,因為我只是遵循標准程序。

提前感謝您的幫助。

-瓦貝哈夫

使用=代替:作為分隔符

baseUri=http://localhost:8080/

無法發表評論,需要更多代表,因此請使用asnwer選項。 檢查您在哪里放置了mediamonitoring.properties。 我的意思是,檢查它是否在您的類路徑中

您應將特殊字符:=轉義為\\ ,如下所示:

baseUri:http\://localhost\:8080/

否則解析器無法確定您的值在哪里結束以及新鍵在哪里開始。
另請參閱Java屬性文件規范

=替換:並使用#代替$

#{baseUri}

您也可以嘗試使用:

<util:properties id="props"
    location="classpath:/yourproperties.properties" />

然后:

@Value("#{props['yourProperty']}")

假設您遵循使用ContextLoaderListenerDispatcherServlet的常規做法,請確保<context:property-placeholder location="classpath:mediamonitoring.properties"/>處於正確的應用程序上下文中。 它將僅在相同應用程序上下文中的Bean上運行,而不在父或子上下文中的Bean上運行。

暫無
暫無

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

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