10

JVM に同じプロパティをロードする必要があるシステムがいくつかあります。-D フラグを使用して一度に 1 つのプロパティを読み込むことができますが、ファイル全体のすべてのプロパティを一度に読み込むものを探しています。例えば:

--options-file=blah.properties をネットワーク上のすべての jvm に一度追加するだけで、それ以降はプロパティ ファイルのみを変更できます。これは、ネットワーク共有上の単一の中央ファイルである可能性があります。

ありがとうございました、

編集: すべての引数またはコマンドは、Windows 環境でも機能する必要があります。したがって、UNIX に固有の bash またはスクリプト ハックは機能しません。

4

4 に答える 4

8

それは大まかに私たちがそれを行う方法です:

java $(tr '\n' ' ' < options_file) other args...

ここoptions_fileには、ready-Dsomethingまたは-Xsomething値が 1 行に 1 つずつ含まれています。このtrコマンドは、すべての改行をスペースに置き換えるだけです。

于 2011-02-01T18:32:34.583 に答える
8

コマンドラインから(おそらくbashハックなしで)それを行うことはできないと思いますが、プログラムでそれを行うことは間違いありません:

単純に 1 つのプロパティ-DmyPropertiesFile=/your/properties/file.propertiesを設定し、オーバーロードの 1 つでそれを読み取りますProperties.load()。その後、System.setProperties(yourProps)あなたが期待することをする必要があります。

もちろん、これには、必要なときにプロパティを使用できるように、このコードを十分早い段階でフックできることが必要です (たとえば、main()メソッドが自分のものであれば、これは完璧です)。

于 2011-02-01T18:33:15.613 に答える
3

いくつかのオプション:

  1. プロパティを.jarファイルでラップしてから、プロセスにそのプロパティファイルをgetClass().getResourceAsStream()
  2. Javaプロセスを実行するバッチファイルを作成し、-Dオプションを明示的にリストするか、コマンドラインを動的に作成します。

私は通常、Spring(他の理由でも使用されます)とPropertyPlaceholderConfigurerを使用してこの問題を解決します。これにより、プロパティファイルの1つ以上の場所を指定し、Spring構成をインプレースで変更できます。

于 2011-02-01T18:31:52.653 に答える
0

Ant を使用して Java プロセスを起動する場合、9000 の回答 (および彼の Windows コメント) が機能し、ランチャーで OS の違いを処理することができます。

Ant から OS を判別する方法を説明する StackOverflow スレッドがここにあります。

于 2013-05-14T16:47:09.353 に答える