12

次のうち、どのアプローチが好ましいのだろうか?

APP_HOME=/path/to/file( exportin.profileまたはそれらの線に沿ったもの)として設定し、次のようにアクセスできます。System.getenv("APP_HOME")

または、代わりにプロパティを使用して、-DAPP_HOME=/path/to/fileとしてアクセスしますSystem.getProperty("APP_HOME")

さて、どちらもアプリケーションの観点から値を利用できるようにしますが、どちらのアプローチが優先されますか? なんで?いつ?

4

4 に答える 4

19

Javadoc forSystem.getenv(String)は、この質問に直接対処し、次のように述べています。

システム プロパティ環境変数はどちらも、名前と値の間の概念的なマッピングです。どちらのメカニズムも、ユーザー定義情報を Java プロセスに渡すために使用できます。環境変数は、直接の Java サブプロセスだけでなく、それらを定義するプロセスのすべての子孫に表示されるため、よりグローバルな効果があります。異なるオペレーティング システムでは、大文字と小文字を区別しないなど、微妙に異なるセマンティクスを持つことができます。これらの理由により、環境変数には意図しない副作用が生じる可能性が高くなります。 可能であれば、システム プロパティを使用することをお勧めします。 グローバルな効果が必要な場合、または外部システム インターフェイスで環境変数 ( などPATH) が必要な場合は、環境変数を使用する必要があります。

(強調鉱山)。

于 2012-12-25T00:14:18.293 に答える
5

Java 1.3 または 1.4 (および 1.2、IIRC) を使用している場合は、System.getenv廃止されたため、システム プロパティを使用する必要があります。Java 1.5 で復活しました。関連するバグ レポートはここにあります。

両方を使用できます。キーのシステム プロパティを検索し、存在しない場合は環境を検索します。これにより、両方の長所が得られます。

これらは実際には同じではありません。1 つは値を明示的に設定する必要があり、もう 1 つはそうではありません。また、環境は、相互運用性のためにいくつかの文字列を配置するのに便利な場所であることに注意してください。

于 2012-12-25T00:12:09.550 に答える