【问题标题】:Is there any syntax like : #{systemProperties['environment_variable_name']} to get the system variable?是否有类似 #{systemProperties['environment_variable_name']} 的语法来获取系统变量?
【发布时间】:2011-09-11 06:34:56
【问题描述】:

在Spring的applicationcontext.xml文件中使用#{systemProperties['environment']}是否返回与环境关联的值?

或者有什么办法可以在spring applicationcontext.xml文件中获取系统变量值。

【问题讨论】:

  • 你说的是系统属性还是环境变量?这是两个不同的东西,你知道...

标签: java spring spring-mvc jakarta-ee system-variable


【解决方案1】:

当我没记错的时候,有区别:

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

  • #{systemProperties['databaseName']}
  • #{systemProperties.databaseName}
  • ${databaseName} //$ 而不是 # !!

使用#{systemProperties['databaseName']},您可以访问系统系统属性。

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

使用${databaseName},您可以从加载和提供的属性文件中访问属性,例如由 PropertyPlaceholderConfigurer 以及系统属性

@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}"/>) 中使用所有这些

【讨论】:

  • 有人知道这两种不同类型的系统属性(系统提供的和命令行提供的)的正确名称吗?
  • 不存在这样的东西。命令行版本设置“真实”系统属性:download.oracle.com/javase/6/docs/technotes/tools/windows/…。这种差异只存在于 Maven 中:系统属性(命令行)与项目属性(pom.xml)
  • @Sean Patrick Floyd:我已经测试过了,你是对的(看来我的记录是错误的)。 -- 我已经更正了答案
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-11-03
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多