[英]access properties from spring file in java class
我一直在假設一些東西,現在看到它是不正確的。 我的 spring 上下文中有以下配置屬性聲明:
<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="searchContextAttributes" value="true" />
<property name="contextOverride" value="true" />
<property name="locations">
<list>
<value>classpath:/app.properties</value>
</list>
</property>
</bean>
我認為app.properties
值會覆蓋我的系統屬性,因此我可以直接在我的 Java 類中訪問它們,如下所示:
String someThingFromPropertyFile = System.getProperty("nameFromPropertyFile");
當然,我到處都是空指針異常。 現在我在這里詢問如何從您的應用程序(應用程序的 Java 類部分)訪問您的應用程序屬性。
有沒有比下面更好的方法(我不是說它不好)。
在應用程序上下文中:
<context:property-placeholder location="classpath:your.properties" ignore-unresolvable="true"/>
然后在java中你可以這樣做:
@Value("${cities}")
private String cities;
其中 your.properties 包含這個:
cities = my test string
Spring
屬性不會覆蓋System
屬性。 它以另一種方式工作。 您應該從Spring
而不是從System.getProperties()
獲取所有屬性。 System
屬性將覆蓋具有相同名稱的Spring
屬性。 您正在設置的SYSTEM_PROPERTIES_MODE_OVERRIDE
表示當您從Spring
獲取屬性值時, System
屬性將獲勝。
您想將該值設置為SYSTEM_PROPERTIES_MODE_FALLBACK
。 這是默認設置,因此您實際上不需要設置它。
如果您考慮到這一點,@NimChimpsky 擁有訪問屬性值的正確方法:
@Value("${nameFromPropertyFileOrSystemProperty}")
private String someThingFromProperty;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.