何时使用环境变量与系统属性?

Jam*_*sev 10 java environment-variables system-properties

我想知道以下哪一种是首选方法?

我们可以设置为APP_HOME=/path/to/file(export.profile这些行中或某些行),并将其作为System.getenv("APP_HOME")

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

现在..任何一个都将使值可用于应用程序的立场,但是这两种方法是否优先?为什么?什么时候?

rua*_*akh 18

Javadoc System.getenv(String)直接解决了这个问题,他说:

系统属性环境变量都是名称和值之间的概念映射.这两种机制都可用于将用户定义的信息传递给Java进程.环境变量具有更全局的效果,因为它们对定义它们的进程的所有后代都是可见的,而不仅仅是直接的Java子进程.它们可以在不同的操作系统上具有微妙的不同语义,例如不区分大小写.由于这些原因,环境变量更可能产生意想不到的副作用. 最好尽可能使用系统属性. 当需要全局效果时,或者当外部系统接口需要环境变量(例如PATH)时,应使用环境变量.

(强调我的).


Nat*_*yan 5

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

你可以使用两者.搜索密钥的系统属性,如果不存在,则搜索环境.这为您提供了两全其美的体验.

这些确实不是一回事:一个需要明确设置值,另一个不需要.另外,请注意环境是一个方便的地方,可以放置一些字符串以实现互操作性.