Theo câu trả lời của Byron, bạn không thể đặt networkaddress.cache.ttl
hoặc networkaddress.cache.negative.ttl
làm Thuộc tính Hệ thống bằng cách sử dụng -D
cờ hoặc gọi System.setProperty
vì đây không phải là thuộc tính Hệ thống - chúng là thuộc tính Bảo mật .
Nếu bạn muốn sử dụng thuộc tính Hệ thống để kích hoạt hành vi này (để bạn có thể sử dụng -D
cờ hoặc lệnh gọi System.setProperty
), bạn sẽ muốn đặt thuộc tính Hệ thống sau :
-Dsun.net.inetaddr.ttl=0
Thuộc tính hệ thống này sẽ kích hoạt hiệu ứng mong muốn.
Nhưng hãy lưu ý: nếu bạn không sử dụng -D
cờ khi bắt đầu quy trình JVM và chọn gọi điều này từ mã thay thế:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0")
Mã này phải thực thi trước khi bất kỳ mã nào khác trong JVM cố gắng thực hiện các hoạt động mạng.
Điều này quan trọng bởi vì, ví dụ: nếu bạn đã gọi Security.setProperty
trong tệp .war và triển khai .war đó cho Tomcat, điều này sẽ không hoạt động: Tomcat sử dụng ngăn xếp mạng Java để tự khởi tạo sớm hơn nhiều so với mã .war của bạn được thực thi. Do 'điều kiện cuộc đua' này, thường sẽ thuận tiện hơn khi sử dụng -D
cờ khi bắt đầu quá trình JVM.
Nếu bạn không sử dụng -Dsun.net.inetaddr.ttl=0
hoặc gọi Security.setProperty
, bạn sẽ cần chỉnh sửa $JRE_HOME/lib/security/java.security
và đặt các thuộc tính bảo mật đó trong tệp đó, ví dụ:
networkaddress.cache.ttl = 0
networkaddress.cache.negative.ttl = 0
Nhưng hãy chú ý đến các cảnh báo bảo mật trong các bình luận xung quanh các thuộc tính đó. Chỉ làm điều này nếu bạn chắc chắn rằng bạn không dễ bị tấn công giả mạo DNS .
java.security.Security
(ít nhất là ở jdk7)