在我处理DNS的第一篇文章之后,仍未解决:JVM和OS DNS缓存 ,我正面临一个新问题.
首先是我的用例:我想检查我的私有DNS是否还活着.如果不是,我想使用一般DNS(例如8.8.8.8).
我的私有DNS(ubuntu上的bind9与192.168.1.188)作为特定记录:test.testdnd.fr - > 192.168.1.100
所以我想我能做到这一点:
if(InetAddress.getByAddress(my_dns_ip_in_byte).isReachable()){
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
System.setProperty("sun.net.spi.nameservice.nameservers", 192.168.1.188);
}else{
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8");
}
InetAddress.getHostByAddress(test.testdnd.fr) -> unknow host exception
Run Code Online (Sandbox Code Playgroud)
但如果我只做:
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
System.setProperty("sun.net.spi.nameservice.nameservers", 192.168.1.188);
InetAddress.getHostByAddress(test.testdnd.fr) -> 192.168.1.100
Run Code Online (Sandbox Code Playgroud)
因此,一旦我在设置system.property之前调用了InetAddress方法,似乎system.property没有任何效果.也许是因为JVM在调用InetAddress方法时加载系统DNS值,即使它不使用DNS解析.
这是JVM中的标准行为还是我失去了什么?
欢迎任何帮助,
小智 6
问题是名称服务提供程序只加载一次InetAddress
并缓存以供进一步使用.加载发生在类的静态初始化程序中InetAddress
.因此,一旦InetAddress
初始化,设置或更改sun.net.spi.nameservice.provider
属性将不再有效.
归档时间: |
|
查看次数: |
3925 次 |
最近记录: |