Согласно ответу Байрона, вы не можете установить networkaddress.cache.ttl
или networkaddress.cache.negative.ttl
в качестве системных свойств, используя флаг -D
или вызывая System.setProperty
, потому что это не системные свойства - они Безопасность свойства.
Если вы хотите использовать системное свойство для запуска этого поведения (чтобы вы могли использовать флаг -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 для инициализации себя намного раньше, чем ваш. код войны выполнен. Из-за этого «состояния гонки» обычно более удобно использовать флаг -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 .