Java 如何使用applicationContext.xml中设置的一些默认值从Spring中的JVM选项访问属性值?

Java 如何使用applicationContext.xml中设置的一些默认值从Spring中的JVM选项访问属性值?,java,spring,spring-mvc,properties,Java,Spring,Spring Mvc,Properties,我想访问从Spring的applicationContext.xml中的JVM传递的一些属性值。我知道实现这一点的一种方法是根据Spring的表达式语言特性,对一些-DmyProperty=xyz使用{systemProperties.myProperty} 但是我感兴趣的是,如果用户没有从服务器的JVM选项中设置值,那么我通过JVM为每个这样的属性指定一个默认值。如何在Spring的任何上下文xml文件中实现这一点?请提供帮助。您可以创建一个bean,该bean使用默认值从上下文中获取映射参数

我想访问从Spring的applicationContext.xml中的JVM传递的一些属性值。我知道实现这一点的一种方法是根据Spring的表达式语言特性,对一些
-DmyProperty=xyz
使用
{systemProperties.myProperty}


但是我感兴趣的是,如果用户没有从服务器的JVM选项中设置值,那么我通过JVM为每个这样的属性指定一个默认值。如何在Spring的任何上下文xml文件中实现这一点?请提供帮助。

您可以创建一个bean,该bean使用默认值从上下文中获取映射参数并初始化系统属性

<bean class="test.B1">
    <constructor-arg>
        <map>
            <entry key="p1" value="v1" />
            <entry key="p2" value="v2" />
                                 ....
        </map>
    </constructor-arg>
</bean>
将属性占位符的本地覆盖属性设置为“true”就足够了


在Spring EL中,可以添加默认值。就你而言:

#{systemProperties.myProperty:MyDefaultValue}

使用基于注释的配置,您可以使用Elvis操作符在Spring EL中提供默认值:

 @Value("#{systemProperties['hostname'] ?: 'default-hostname'}")
 private String hostname;

基于atrain的有用答案。我还不能评论,或者我已经把语法更正放在那里了:(

尝试过了,它在这里不起作用给出了表达式语言解析错误。我想它是针对Spring Properties PlaceHolder中的${x.y}。请看我的更新,也许你会感兴趣
<context:property-placeholder location="classpath:/app.properties" local-override="true" />
#{systemProperties.myProperty:MyDefaultValue}
 @Value("#{systemProperties['hostname'] ?: 'default-hostname'}")
 private String hostname;