Zgodnie z odpowiedzią Byrona nie można ustawić networkaddress.cache.ttl
ani networkaddress.cache.negative.ttl
jako właściwości systemu za pomocą -D
flagi lub wywołania, System.setProperty
ponieważ 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ć -D
flagi 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 -D
flagi 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.setProperty
wywoł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ć -D
flagi podczas uruchamiania procesu JVM.
Jeśli nie używasz -Dsun.net.inetaddr.ttl=0
lub nie dzwonisz Security.setProperty
, będziesz musiał edytować $JRE_HOME/lib/security/java.security
i 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)