ตามคำตอบของ Byron คุณไม่สามารถตั้งค่าnetworkaddress.cache.ttl
หรือnetworkaddress.cache.negative.ttl
เป็นคุณสมบัติของระบบโดยใช้-D
แฟล็กหรือการโทรSystem.setProperty
เนื่องจากสิ่งเหล่านี้ไม่ใช่คุณสมบัติของระบบ - เป็นคุณสมบัติด้านความปลอดภัย
หากคุณต้องการใช้คุณสมบัติของระบบเพื่อทริกเกอร์ลักษณะการทำงานนี้ (เพื่อให้คุณสามารถใช้-D
แฟล็กหรือการโทรSystem.setProperty
) คุณจะต้องตั้งค่าคุณสมบัติของระบบต่อไปนี้:
-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)