Gemäß der Antwort von Byron können Sie keine networkaddress.cache.ttl
oder networkaddress.cache.negative.ttl
als Systemeigenschaften festlegen, indem Sie das -D
Flag oder den Aufruf verwenden, System.setProperty
da dies keine Systemeigenschaften sind - es handelt sich um Sicherheitseigenschaften .
Wenn Sie eine Systemeigenschaft verwenden möchten, um dieses Verhalten auszulösen (damit Sie das -D
Flag oder den Aufruf verwenden können System.setProperty
), müssen Sie die folgende Systemeigenschaft festlegen :
-Dsun.net.inetaddr.ttl=0
Diese Systemeigenschaft aktiviert den gewünschten Effekt.
Beachten Sie jedoch Folgendes: Wenn Sie das -D
Flag beim Starten des JVM-Prozesses nicht verwenden und stattdessen den Code aufrufen:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0")
Dieser Code muss ausgeführt werden, bevor ein anderer Code in der JVM versucht, Netzwerkvorgänge auszuführen.
Dies ist wichtig, da dies beispielsweise Security.setProperty
nicht funktioniert , wenn Sie eine .war-Datei aufgerufen und diese .war für Tomcat bereitgestellt haben: Tomcat verwendet den Java-Netzwerkstapel, um sich viel früher zu initialisieren, als der .war-Code ausgeführt wird. Aufgrund dieser "Race-Bedingung" ist es normalerweise bequemer, das -D
Flag zu verwenden, wenn der JVM-Prozess gestartet wird.
Wenn Sie nicht verwenden -Dsun.net.inetaddr.ttl=0
oder aufrufen Security.setProperty
, müssen Sie $JRE_HOME/lib/security/java.security
diese Sicherheitseigenschaften in dieser Datei bearbeiten und festlegen, z
networkaddress.cache.ttl = 0
networkaddress.cache.negative.ttl = 0
Beachten Sie jedoch die Sicherheitswarnungen in den Kommentaren zu diesen Eigenschaften. Tun Sie dies nur, wenn Sie einigermaßen sicher sind, dass Sie nicht anfällig für DNS-Spoofing-Angriffe sind .
java.security.Security
(zumindest in jdk7)