Zgodnie z odpowiedzią Byrona nie można ustawić networkaddress.cache.ttlani networkaddress.cache.negative.ttljako właściwości systemu za pomocą -Dflagi lub wywołania, System.setPropertyponieważ nie są to właściwości systemu - są to właściwości zabezpieczeń .
Jeśli chcesz użyć właściwości System do wyzwalania tego zachowania (abyś mógł użyć -Dflagi lub wywołania System.setProperty), będziesz chciał ustawić następującą właściwość System :
-Dsun.net.inetaddr.ttl=0
Ta właściwość systemowa zapewni pożądany efekt.
Ale pamiętaj: jeśli nie użyjesz -Dflagi podczas uruchamiania procesu JVM i zamiast tego wybierzesz wywołanie tego z kodu:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0")
Ten kod musi zostać wykonany, zanim jakikolwiek inny kod w maszynie JVM spróbuje wykonać operacje sieciowe.
Jest to ważne, ponieważ, na przykład, gdybyś Security.setPropertywywołał plik .war i wdrożył go na serwerze Tomcat, to nie zadziała: Tomcat używa stosu sieciowego Java do inicjalizacji znacznie wcześniej niż kod .war jest wykonywany. Z powodu tego „wyścigu” zwykle wygodniej jest używać -Dflagi podczas uruchamiania procesu JVM.
Jeśli nie używasz -Dsun.net.inetaddr.ttl=0lub nie dzwonisz Security.setProperty, będziesz musiał edytować $JRE_HOME/lib/security/java.securityi ustawić te właściwości zabezpieczeń w tym pliku, np
networkaddress.cache.ttl = 0
networkaddress.cache.negative.ttl = 0
Zwróć jednak uwagę na ostrzeżenia dotyczące bezpieczeństwa w komentarzach dotyczących tych nieruchomości. Rób to tylko wtedy, gdy masz wystarczającą pewność, że nie jesteś podatny na ataki polegające na spoofingu DNS .
java.security.Security(przynajmniej w jdk7)