Selon la réponse de Byron, vous ne pouvez pas définir networkaddress.cache.ttl
ou en networkaddress.cache.negative.ttl
tant que propriétés système en utilisant l' -D
indicateur ou en appelant System.setProperty
car ce ne sont pas des propriétés système - ce sont des propriétés de sécurité .
Si vous souhaitez utiliser une propriété System pour déclencher ce comportement (afin que vous puissiez utiliser l' -D
indicateur ou l'appel System.setProperty
), vous souhaiterez définir la propriété System suivante :
-Dsun.net.inetaddr.ttl=0
Cette propriété système activera l'effet souhaité.
Mais soyez conscient: si vous n'utilisez pas l' -D
indicateur lors du démarrage du processus JVM et choisissez de l'appeler à partir du code à la place:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0")
Ce code doit s'exécuter avant que tout autre code de la JVM tente d'effectuer des opérations de mise en réseau.
Ceci est important car, par exemple, si vous Security.setProperty
appelez un fichier .war et déployez ce .war sur Tomcat, cela ne fonctionnera pas: Tomcat utilise la pile réseau Java pour s'initialiser beaucoup plus tôt que le code de votre .war ne sera exécuté. En raison de cette «condition de concurrence», il est généralement plus pratique d'utiliser l' -D
indicateur lors du démarrage du processus JVM.
Si vous n'utilisez pas -Dsun.net.inetaddr.ttl=0
ou n'appelez pas Security.setProperty
, vous devrez modifier $JRE_HOME/lib/security/java.security
et définir ces propriétés de sécurité dans ce fichier, par exemple
networkaddress.cache.ttl = 0
networkaddress.cache.negative.ttl = 0
Mais faites attention aux avertissements de sécurité dans les commentaires entourant ces propriétés. Ne le faites que si vous êtes raisonnablement sûr que vous n'êtes pas vulnérable aux attaques d'usurpation DNS .
java.security.Security
(au moins en jdk7)