Secondo la risposta di Byron, non è possibile impostare networkaddress.cache.ttlo networkaddress.cache.negative.ttlcome proprietà di sistema utilizzando il -Dflag o chiamando System.setPropertyperché queste non sono proprietà di sistema: sono proprietà di sicurezza .
Se desideri utilizzare una proprietà System per attivare questo comportamento (in modo da poter utilizzare il -Dflag o la chiamata System.setProperty), ti consigliamo di impostare la seguente proprietà System :
-Dsun.net.inetaddr.ttl=0
Questa proprietà di sistema abiliterà l'effetto desiderato.
Ma attenzione: se non usi il -Dflag quando avvii il processo JVM e scegli di chiamarlo invece dal codice:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0")
Questo codice deve essere eseguito prima che qualsiasi altro codice nella JVM tenti di eseguire operazioni di rete.
Questo è importante perché, ad esempio, se si richiama Security.setPropertyun file .war e si distribuisce tale .war su Tomcat, ciò non funzionerebbe: Tomcat utilizza lo stack di rete Java per inizializzarsi molto prima dell'esecuzione del codice .war. A causa di questa "condizione di competizione", di solito è più conveniente utilizzare il -Dflag quando si avvia il processo JVM.
Se non usi -Dsun.net.inetaddr.ttl=0o chiami Security.setProperty, dovrai modificare $JRE_HOME/lib/security/java.securitye impostare quelle proprietà di sicurezza in quel file, ad es
networkaddress.cache.ttl = 0
networkaddress.cache.negative.ttl = 0
Ma fai attenzione agli avvisi di sicurezza nei commenti che circondano tali proprietà. Fallo solo se sei ragionevolmente sicuro di non essere soggetto ad attacchi di spoofing DNS .
java.security.Security(almeno in jdk7)