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