Byron cevap gereğince, ayarlayamıyor networkaddress.cache.ttlveya networkaddress.cache.negative.ttlSistem Özellikleri olarak kullanarak -Dbayrak veya çağıran System.setPropertybu sistem özellikleri olmadıklarından - olduklarını Güvenlik özellikleri.
Bu davranışı tetiklemek için bir Sistem özelliği kullanmak istiyorsanız (böylece -Dbayrağı veya çağrıyı kullanabilirsiniz System.setProperty), aşağıdaki Sistem özelliğini ayarlamak isteyeceksiniz :
-Dsun.net.inetaddr.ttl=0
Bu sistem özelliği, istenen etkiyi sağlayacaktır.
Ancak unutmayın: -DJVM sürecini başlatırken bayrağı kullanmazsanız ve bunun yerine bunu koddan çağırmayı seçerseniz :
java.security.Security.setProperty("networkaddress.cache.ttl" , "0")
Bu kod , JVM'deki diğer herhangi bir kod ağ işlemlerini gerçekleştirmeye çalışmadan önce yürütülmelidir.
Bu önemlidir, çünkü, örneğin, Security.setPropertybir .war dosyasını çağırıp bu .war'ı Tomcat'e konuşlandırdıysanız, bu işe yaramaz: Tomcat, .war kodunuzun çalıştırılmasından çok daha önce kendisini başlatmak için Java ağ yığınını kullanır. Bu 'yarış durumu' nedeniyle -D, JVM sürecini başlatırken genellikle bayrağı kullanmak daha uygundur .
Kullanmaz -Dsun.net.inetaddr.ttl=0veya arama yapmazsanız , o dosyadaki güvenlik özelliklerini Security.setPropertydüzenlemeniz $JRE_HOME/lib/security/java.securityve ayarlamanız gerekir , örn.
networkaddress.cache.ttl = 0
networkaddress.cache.negative.ttl = 0
Ancak bu mülkleri çevreleyen yorumlardaki güvenlik uyarılarına dikkat edin. Bunu yalnızca DNS sahtekarlığı saldırılarına karşı duyarlı olmadığınızdan makul ölçüde eminseniz yapın .
java.security.Security(en azından jdk7'de)