我一直在假设,看到现在它不正确。我在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类部分)访问您的应用程序属性。
有没有比下面更好的方法(我不是说这很糟糕)。
答案 0 :(得分:6)
在应用环境中:
<context:property-placeholder location="classpath:your.properties" ignore-unresolvable="true"/>
然后在java中你可以这样做:
@Value("${cities}")
private String cities;
你的.properties包含这个:
cities = my test string
答案 1 :(得分:0)
Spring
属性不会覆盖System
属性。它以另一种方式工作。您应该从Spring
获取所有属性,而不是从System.getProperties()
获取。 System
属性将覆盖具有相同名称的Spring
属性。您设置的SYSTEM_PROPERTIES_MODE_OVERRIDE
表示,当您从Spring
获取属性值时,System
属性将获胜。
您想将值设置为SYSTEM_PROPERTIES_MODE_FALLBACK
。这是默认值,因此您实际上不需要设置它。
如果你有这个想法,@ NimChimpsky有正确的方法来访问属性值:
@Value("${nameFromPropertyFileOrSystemProperty}")
private String someThingFromProperty;