【问题标题】:access properties from spring file in java class从java类中的spring文件访问属性
【发布时间】:2012-09-29 23:59:41
【问题描述】:

我一直在假设一些东西,但现在发现它是不正确的。我的 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?

【问题讨论】:

  • 为什么不直接在你需要的地方注入属性或者使用工具呢? (我不确定你为什么认为它们会覆盖系统属性——它们完全不相关。)

标签: java spring


【解决方案1】:

在应用上下文中:

 <context:property-placeholder location="classpath:your.properties" ignore-unresolvable="true"/>

然后在java中你可以这样做:

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

your.properties 包含此内容的位置:

cities = my test string 

【讨论】:

    【解决方案2】:

    Spring 属性不会覆盖System 属性。它以另一种方式工作。您应该从Spring 而不是从System.getProperties() 获得所有属性。 System 属性将覆盖 Spring 具有相同名称的属性。您设置的 SYSTEM_PROPERTIES_MODE_OVERRIDE 表示,当您从 Spring 获取属性值时,System 属性将获胜。

    您希望将值设置为SYSTEM_PROPERTIES_MODE_FALLBACK。这是默认设置,因此您实际上不需要设置它。

    如果你有这个想法,@NimChimpsky 有它访问属性值的正确方法:

    @Value("${nameFromPropertyFileOrSystemProperty}")
    private String someThingFromProperty;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      相关资源
      最近更新 更多