De acordo com a resposta de Byron, você não pode definir networkaddress.cache.ttl
ou networkaddress.cache.negative.ttl
como Propriedades do sistema usando o -D
sinalizador ou chamando System.setProperty
porque essas não são propriedades do sistema - são propriedades de segurança .
Se você deseja usar uma propriedade do sistema para acionar esse comportamento (para que você possa usar o -D
sinalizador ou chamada System.setProperty
), você desejará definir a seguinte propriedade do sistema :
-Dsun.net.inetaddr.ttl=0
Esta propriedade do sistema habilitará o efeito desejado.
Mas esteja ciente: se você não usar o -D
sinalizador ao iniciar o processo JVM e optar por chamar isso a partir do código:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0")
Este código deve ser executado antes que qualquer outro código na JVM tente realizar operações de rede.
Isso é importante porque, por exemplo, se você chamasse Security.setProperty
um arquivo .war e implantasse esse .war no Tomcat, isso não funcionaria: o Tomcat usa a pilha de rede Java para inicializar a si mesmo muito antes da execução do código .war. Por causa dessa 'condição de corrida', geralmente é mais conveniente usar o -D
sinalizador ao iniciar o processo JVM.
Se você não usar -Dsun.net.inetaddr.ttl=0
ou chamar Security.setProperty
, precisará editar $JRE_HOME/lib/security/java.security
e definir essas propriedades de segurança nesse arquivo, por exemplo
networkaddress.cache.ttl = 0
networkaddress.cache.negative.ttl = 0
Mas preste atenção aos avisos de segurança nos comentários sobre essas propriedades. Só faça isso se você estiver razoavelmente confiante de que não é suscetível a ataques de spoofing de DNS .
java.security.Security
(pelo menos em jdk7)