2011-06-08 60 views

回答

27

当我没记错的话是有差异之间:

您可以用不同的方式访问系统属性:

  • #{systemProperties['databaseName']}
  • #{systemProperties.databaseName}
  • ${databaseName} // $代替 # !!

随着#{systemProperties['databaseName']}您可以访问系统中的系统性能。

使用#{systemProperties.databaseName}您可以访问例如从命令行(-DdatabaseName="testDB")获得的系统属性。

随着${databaseName}你有从属性访问属性文件加载并PropertyPlaceholderConfigurer 和系统prooperties太

@Value("#{systemProperties['java.version']}") 
private String javaVersionMap; 

//Dont know how 
//@Value("#{systemProperties.javav.version}") 
//private String javaVersionDirect; 

@Value("${java.version}") 
private String javaVersionProp; 

//-DcmdParam=helloWorld 
@Value("#{systemProperties['cmdParam']}") 
private String cmdParamMap; 

@Value("#{systemProperties.cmdParam}") 
private String cmdParamDirect; 

@Value("${cmdParam}") 
private String cmdParamProp 

可以使用例如设置所有这些文件都在@Value注释或config.xml文件(<property name="databaseName" value="#{systemProperties.databaseName}"/>

+0

有没有人知道这两种不同类型的系统属性(系统提供的和命令行提供的)的正确名称? – Ralph 2011-06-09 07:23:00

+0

不存在这样的事情。命令行版本设置“真实”系统属性:http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html#standard。这种差异只存在于Maven中:系统属性(命令行)vs项目属性(pom.xml) – 2011-06-09 10:09:04

+0

@Sean Patrick Floyd:我测试了它并且你是对的(它证明我的记录是错误的)。 - 我已经纠正了答案 – Ralph 2011-06-10 06:03:44

4

做这种事情的一种方法是使用PropertyPlaceholderConfigurer,它可以配置为使用系统属性。

我也注意到,Spring 3.1 M1 blog entry谈论从“环境”访问配置信息的新东西。当然,这只是一个里程碑......而不是生产就绪版本。

相关问题