2015-01-05 12 views
5

Przechodzę w niektórych zmiennych środowiskowych -D jako opcje VM do aplikacji serwera Java.Jak uzyskać parametry -D przekazane do uruchomienia Java

Muszę pobrać te zmienne z aplikacji, ale kiedy używam System.getProperties(), otrzymuję wszystkie te, plus wszystkie właściwości systemowe zdefiniowane na poziomie systemu operacyjnego, co mnie nie interesuje.

Czy istnieje sposób na odkrycie parametrów -D?

Odpowiedz

1

można uzyskać go za pomocą RuntimeMXBean (interfejs zarządzania systemem uruchomieniowym maszyny wirtualnej Java) jak to

RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean(); 
List<String> args = bean.getInputArguments(); 

Należy pamiętać, że getInputArguments() Zwraca argumenty wejściowe przekazane do wirtualnej maszyny języka Java, które nie zawierają argumentów metody głównej. Ta metoda zwraca pustą listę, jeśli nie ma żadnego argumentu wejściowego na maszynie wirtualnej Java.

1

Jest to dostępne w wersji RuntimeMXBean dostarczonej przez maszynę wirtualną. Można uzyskać listę parametrów wiersza polecenia za pośrednictwem połączenia getInputArguments() ...

import java.lang.management.ManagementFactory; 

public class CmdLine { 
    public static void main(String... args) { 
     System.out.println(ManagementFactory.getRuntimeMXBean().getInputArguments()); 
    } 
} 
0

Najlepszym rozwiązaniem jest użycie specjalnego prefiksu dla właściwości jest używana, tak aby można było je odróżnić od innych: java -Dfoo.bar=x -Dfoo.bat=y -Dfoo.baz=z ..., a następnie:

for(Map.Entry<String,String> kv: System.getProperties().entrySet()) { 
    if(kv.getKey().starts with("foo")) { 
     System.out.println("Command line property " + kv.getKey() + "=" + kv.getValue()); 
    } 
} 
+0

Kto jest downvoting to obchodzi się rozwinąć? Czy uważasz, że ta odpowiedź jest niedokładna, nieistotna lub nieprzydatna? – Dima

+0

Czy nie nienawidzisz, gdy ludzie to robią? Ale twoja odpowiedź jest trochę hackowa, prawdopodobnie dlatego oni ją głosowali. W każdym razie, sprawdziłem to z powrotem. – vinnygray

+0

Dzięki :) Nie zgadzam się, że to jest hack. Prefixowanie nazw właściwości za pomocą "przestrzeni nazw" jest dość standardową praktyką w branży. Zwykle nie nazywasz swoich właściwości "cacheSize", prawda? Prawdopodobnie wolałbyś coś w rodzaju 'vinnygray.cache.size', prawda? – Dima

Powiązane problemy