2011-06-08 59 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談論從「環境」訪問配置信息的新東西。當然,這只是一個里程碑......而不是生產就緒版本。

相關問題