从java类中的spring文件访问属性

时间:2012-10-09 15:42:25

标签: java spring

我一直在假设,看到现在它不正确。我在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类部分)访问您的应用程序属性。

有没有比下面更好的方法(我不是说这很糟糕)。

Access properties file programmatically with Spring?

2 个答案:

答案 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;