簡體   English   中英

從java類中的spring文件訪問屬性

[英]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 類部分)訪問您的應用程序屬性。

有沒有比下面更好的方法(我不是說它不好)。

使用 Spring 以編程方式訪問屬性文件?

在應用程序上下文中:

 <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.

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