【问题标题】:Setting Java DNS cache TTL设置 Java DNS 缓存 TTL
【发布时间】:2012-08-19 10:26:30
【问题描述】:

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

谢谢。

【问题讨论】:

  • 您引用的链接表明“setProperty()”(“Option #2”)不起作用。问:您是否尝试过“Option#1”(编辑 jre/lib/security/java.security)?你发现了什么?您使用的是哪个 Java 版本?
  • 没错,我似乎已经证实了评论者所说的话。没有尝试过链接中的选项#1,宁愿这是在代码中而不是配置中。我正在使用 1.6

标签: java dns


【解决方案1】:

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

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

【讨论】:

  • 这对于 Spring Boot 2 应用程序是否可行?我放了一个 println ,似乎这被执行了 2 次。那会是个问题吗?此外,如果我尝试将它放在 @Configuration 类中,似乎 println 在 Hikari 连接到数据库后执行。更新:它似乎被执行了两次,因为我使用了 spring-boot-devtools
【解决方案2】:

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

【讨论】:

【解决方案3】:

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

Google desc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2022-01-26
    • 2019-08-04
    相关资源
    最近更新 更多