Согласно ответу Байрона, вы не можете установить networkaddress.cache.ttl
или в networkaddress.cache.negative.ttl
качестве свойств системы с помощью -D
флага или вызова, System.setProperty
потому что это не свойства системы - это свойства безопасности .
Если вы хотите использовать свойство System для запуска этого поведения (чтобы вы могли использовать -D
флаг или вызов System.setProperty
), вам нужно будет установить следующее свойство System :
-Dsun.net.inetaddr.ttl=0
Это системное свойство позволит добиться желаемого эффекта.
Но имейте в виду: если вы не используете -D
флаг при запуске процесса JVM и выбираете вызов этого из кода вместо этого:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0")
Этот код должен выполняться до того, как любой другой код в JVM попытается выполнить сетевые операции.
Это важно, потому что, например, если вы вызвали Security.setProperty
файл .war и развернули этот .war в Tomcat, это не сработает: Tomcat использует сетевой стек Java для инициализации намного раньше, чем выполняется ваш код .war. Из-за этого «состояния гонки» обычно удобнее использовать -D
флаг при запуске процесса JVM.
Если вы не используете -Dsun.net.inetaddr.ttl=0
или не вызываете Security.setProperty
, вам нужно будет отредактировать $JRE_HOME/lib/security/java.security
и установить эти свойства безопасности в этом файле, например
networkaddress.cache.ttl = 0
networkaddress.cache.negative.ttl = 0
Но обратите внимание на предупреждения о безопасности в комментариях к этим свойствам. Делайте это только в том случае, если вы достаточно уверены, что не подвержены атакам с подменой DNS .
java.security.Security
(по крайней мере, в jdk7)