System.get PropertyとSystem.getensv

2211 ワード

紹介する
java.langバッグはjavaアプリケーションで自動的に導入されます。このバッグには多くの一般的な種類が含まれています。Null PointExceptionからObject、Math、Stringなどです。
java.lang.System類はfinal類で、これは私達がその実例を作ることができないという意味で、そのすべての方法はstaticです。以下では、2つのシステム方法のシステム属性と環境変数の違いを説明します。方法名はそれぞれget Propty and getensvです。
System.get Propertyを使用する()
javaプラットフォームはPropertiesオブジェクトを使用して、ローカルシステムの構成情報を提供します。システム属性には、現在のユーザ、java実行時のバージョン、およびファイルパスのセパレータなどがあります。次のコードでは、System.get Propertyを使ってロゴを読み込みます。dir属性の値は、デフォルト値パラメータを使用してもよく、属性が存在しない場合はデフォルト値に戻ります。System.get Propertyはいつも文字列に戻ります。
String log_dir=System.get Property(「logudir」、「/tmp/log」)運行時にシステム属性を更新するために、System.set Property方法を使用します。
System.set Property(「logudir」、「/tmp/log」)属性コマンドラインパラメータを使用して、アプリケーションに属性または設定値を伝えることもできます。
java-jar jarName-DpropertyName=value ap.jarアプリケーションのfoo属性設定値はbar:
java-jar ap-Dfoo="bar"
System.getensvを使う()
環境変数と属性は似ています。キーパッドの対型です。ほとんどのオペレーティングシステムは環境変数を使って、設定情報をアプリケーションに伝えることができます。オペレーティングシステムによって環境変数の設定方法が異なります。例えば、windowsはコントロールパネルのシステムプログラムを使いますが、Unixはshellスクリプトを使います。作成時に親プロセスの環境変数コピーをデフォルトで継承します。
以下のコードセグメントは、すべての環境変数をプリントするlamda式を示します。
System.getenv().forEach((k, v) -> {
    System.out.println(k + ":" + v);
});
getensv()は読み取り専用Mapに戻ります。MapにUnisportedOperationExceptionを投げ出すまで増加してみます。単一の変数を取得すると、getensv()メソッドを呼び出して変数名を指定できます。
String log_dir = System.getenv("log_dir");
また、私たちは私たちのアプリケーションから別のプロセスを作成できます。この時、彼の環境に変数を追加できます。javaではProcesssBuiderクラスを通じてプロセスを作成できます。そのenvironment方法は環境変数Mapに戻りますが、このmapは読み取り専用ではなく、対応する要素を増やすことができます。
ProcessBuilder pb = new ProcessBuilder(args);
Map env = pb.environment();
env.put("log_dir", "/tmp/log");
Process process = pb.start();
両者の違い
両方の本質はmapであり、文字列キーと値を提供していますが、いくつかの違いがあります。
動作中に属性を更新することができます。環境変数はオペレーティングシステム変数の可変コピーで、変更できません。属性はjavaプラットフォームでのみ有効ですが、環境変数は大域的で、オペレーティングシステムレベルに属します。同じマシンで動作するすべてのアプリケーションは有効です。パッケージアプリケーションは属性が必要ですが、環境変数はいつでも作成できます。概念的には類似しているが,属性と環境変数の応用は全く異なる。選択の鍵は範囲問題であり、環境変数を使用して、同じアプリケーションは複数のマシンで異なるインスタンスを実行できるように配置され、オペレーティングシステムのレベルで構成され、クラウドホストコンソールにも配置されます。再コンパイルしてアプリケーションを構築して構成を更新する必要はありません。
またget Propertyはラクダの命名の約束に従います。