Secondo la risposta di Byron, non è possibile impostare networkaddress.cache.ttl
o networkaddress.cache.negative.ttl
come proprietà di sistema utilizzando il -D
flag o chiamando System.setProperty
perché 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 -D
flag 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 -D
flag 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.setProperty
un 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 -D
flag quando si avvia il processo JVM.
Se non usi -Dsun.net.inetaddr.ttl=0
o chiami Security.setProperty
, dovrai modificare $JRE_HOME/lib/security/java.security
e 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)