5

我正在尝试更改 Java 1.6 中的 DNS 缓存超时。我在这里看到使用类似以下内容的讨论:

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 安装的安全属性中进行更改,但我更愿意将其保留在代码中以保持整洁。任何想法如何实现这一目标?

谢谢。

4

3 回答 3

14

试试这个,看看你得到的输出。加载类时需要设置该属性。

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());
}
于 2012-12-11T10:34:39.447 回答
2

这些不是系统属性:它们是在 java.security 文件中设置的。有关非首选的相应系统属性,请参阅网络属性中的“Sun implementation-specific properties” 。

于 2012-08-24T05:15:28.357 回答
0

在 Android 4.0 (Ice Cream Sandwich) 及更早版本中,DNS 缓存由 InetAddress 和 C 库执行,这意味着 DNS TTL 无法正确处理。在以后的版本中,缓存仅由 C 库完成,并且支持 DNS TTL。

谷歌描述

于 2015-03-16T10:30:19.900 回答