2012-12-24 65 views
9

我想知道以下哪一项是首选方法?何时使用环境变量与系统属性?

我们可以做一些事情,为APP_HOME=/path/to/fileexport.profile或类似的规定)和访问它作为System.getenv("APP_HOME")

,或者使用性质为-DAPP_HOME=/path/to/file和访问它作为System.getProperty("APP_HOME")

现在..无论是人们会为应用程序的立场提供可用的价值,但是哪种方法是首选的?为什么?什么时候?

+2

为什么一个优于其他? IMO环境变量应该被-D指定的选项覆盖,但除此之外,meh。 –

+1

那么,我们有2个选项可以做同样的事情吗?因此,问题 – JAM

+0

为什么不能同时使用?搜索密钥的系统属性,如果不存在,则搜索环境。它们并不是一回事,因为它需要为应用程序显式设置值,而另一个则不需要。 –

回答

5

如果您使用的是Java 1.3或1.4(和1.2,IIRC),则应该使用系统属性,因为System.getenv已被弃用。它在Java 1.5中恢复。相关的错误报告可以在here找到。

您可以同时使用两者。搜索密钥的系统属性,如果不存在,则搜索环境。这给你两全其美。

这些确实不是一回事:一个需要显式设置值,另一个不需要。另外请注意,环境是放置一些字符串以实现互操作性的便利场所。

+1

注意它是'System.getenv',而不是'getEnv'。 –

+0

@DaveNewton:感谢您的纠正。将解决。 –

+0

不应使用System.getenv()方法来访问环境变量,因为并非所有平台都支持环境变量。 - 由CodePro代码分析工具给出的推理 –

15

的Javadoc System.getenv(String)地址这个问题直接,saying

系统 性能环境变量是名称和值之间都 概念映射。这两种机制都可用于将用户定义的信息传递给Java进程 。环境变量具有更全局的效果, ,因为它们对定义它们的所有进程 的后代都可见,而不仅仅是直接的Java子进程。 它们可以在不同的操作系统上具有细微差别的语义,例如不敏感的情况下 。对于这些 的原因,环境变量更可能有非预期的副作用。 如果可能,最好使用系统属性 。当需要全局效应或当外部系统接口 需要环境变量(如PATH)时,应使用环境变量。

(强调我的)。

0

目前还不能评论,所以我会添加几个要点作为答案。

我同意javadoc的说法:“最好在可能的情况下使用系统属性”,在我看来这个页面之前,我自己也说过,Java系统变量被封装在JVM中。它们对主机上的其他进程不可见,因此与主机系统的耦合程度较低。

此外,还有多个接口来设置全局环境变量,因此跟踪所有随时间使用的值可能有点棘手。

相关问题