Відповідно до відповіді Байрона, ви не можете встановити 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)