我面临着 JVM 和 DNS 的问题。
我正在阅读的所有内容(包括 docs和this)都说我可以使用 禁用 JVM DNS 缓存networkaddress.cache.ttl
,可以使用 设置java.security.Security.setProperties
,但是通过使用系统属性的标准方法。我已成功将其更改为 0,因此我的 JVM 中不再有缓存。
但是现在,在每次调用 时InetAddress.getByName("mytest.com")
,我的 JVM 似乎都在使用系统DNS 缓存(在我的情况下是 Windows 8)。实际上,在两次调用该方法之间,我更改了“mytest.com”的 BIND9 属性,但 IP 返回仍然相同。这是工作流程:
setCachePolicyInJVM(0)
在我的 Java 代码中。- 设置
mytest.com
为 192.168.1。BIND9中的188,重新启动。 InetAddress.getByName("mytest.com").getHostAddress();
-> 192.168.1。188- 设置
mytest.com
-> 192.168.1。BIND9中的160,重新启动。 InetAddress.getByName("mytest.com").getHostAddress();
-> 192.168.1。188 (如果没有缓存,应该是160 )。- 刷新 Windows DNS
InetAddress.getByName("mytest.com").getHostAddress();
-> 192.168.1。160
我曾多次读到 JVM 不使用系统缓存,但这是错误的:它显然是这样做的。
我们如何绕过操作系统DNS 缓存在每次调用时强制执行新的 DNS 解析?