2012-08-23 118 views
4

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

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

非常链接你引用建议 “的setProperty()”( “选项2”)不起作用。问:您是否尝试过“Option#1”(编辑jre/lib/security/java.security)?你发现了什么?你使用什么Java版本? – paulsm4

+0

的确,我似乎已经确认了评论者的评论。没有尝试从链接选项#1,而不是配置的代码。我正在使用1.6 – Jonathan

回答

2

这些不是系统属性:它们是在java.security文件中设置的。有关相应的系统属性(非优先),请参见Networking Properties中的“Sun实施特定属性”。

+0

正确。有关设置DNS缓存TTL(包括作为-D标志或系统属性)的完整列表,请参阅http://stackoverflow.com/questions/1256556/any-way-to-make-java-honor-the- DNS缓存超时-TTL。 –

10

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

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()); 
} 
0

在搭载Android 4.0(冰淇淋三明治)和更早版本,DNS缓存是由两个InetAddress类和C库,这意味着DNS的TTL无法正确执行兑现。在更高版本中,缓存完全由C库完成,并且DNS TTL得到遵守。

Google desc