我正在尝试更改Java 1.6中的DNS缓存超时。我看到使用类似以下内容的讨论here:
java.security.Security.setProperty ("networkaddress.cache.ttl" , TTL_SECS);
但我在Win 7中尝试过这个简单的测试....
System.out.println("DEFAULT DNS TTL: "+sun.net.InetAddressCachePolicy.get());
java.security.Security.setProperty ("networkaddress.cache.ttl" , "123");
System.out.println("DEFAULT DNS TTL: "+sun.net.InetAddressCachePolicy.get());
...并且输出不会改变。看来这可以在Java安装的安全属性中进行更改,但我不愿意将其保留在代码中以保持整洁。任何想法如何实现?
感谢。
答案 0 :(得分:11)
试试这个,看看你得到的输出。在加载类时需要设置属性。
static {
java.security.Security.setProperty ("networkaddress.cache.ttl" , "12");
}
public static void main(String[] args) {
System.out.println("DEFAULT DNS TTL: "+sun.net.InetAddressCachePolicy.get());
java.security.Security.setProperty ("networkaddress.cache.ttl" , "123");
System.out.println("DEFAULT DNS TTL: "+sun.net.InetAddressCachePolicy.get());
}
答案 1 :(得分:2)
这些不是系统属性:它们在java.security文件中设置。对于非首选的相应系统属性,请参阅Networking Properties中的“Sun实现特定属性”。
答案 2 :(得分:0)
在Android 4.0(冰淇淋三明治)及更早版本中,DNS缓存由InetAddress和C库执行,这意味着DNS TTL无法正确兑现。在以后的版本中,缓存仅由C库完成,并且DNS TTL很受尊重。