Java 如何使用applicationContext.xml中设置的一些默认值从Spring中的JVM选项访问属性值?
我想访问从Spring的applicationContext.xml中的JVM传递的一些属性值。我知道实现这一点的一种方法是根据Spring的表达式语言特性,对一些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使用默认值从上下文中获取映射参数
-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;