我正面臨JVM和DNS的問題。JVM和OS DNS緩存
一切我讀(包括the docs和this)說,我可以使用networkaddress.cache.ttl
,可使用java.security.Security.setProperties
設置禁用JVM DNS緩存,而是通過使用系統屬性的標準方法。我已經成功地將其更改爲0,因此我的JVM中沒有更多的緩存。
但是現在,在每次調用InetAddress.getByName("mytest.com")
時,似乎我的JVM正在使用DNS緩存(在我的情況下是Windows 8)系統。實際上,在該方法的兩次調用之間,我已更改「mytest.com」的BIND9屬性,但IP返回值仍然相同。這裏是工作流程:
setCachePolicyInJVM(0)
在我的Java代碼。- set
mytest.com
to 192.168.1。 在BIND9中重新啓動。 InetAddress.getByName("mytest.com").getHostAddress();
- > 192.168.1。- set
mytest.com
- > 192.168.1。 在BIND9中重新啓動。 InetAddress.getByName("mytest.com").getHostAddress();
- > 192.168.1。 (應該是如果沒有緩存)。- 刷新Windows DNS
InetAddress.getByName("mytest.com").getHostAddress();
→192.168.1。
我看過好幾次了JVM不使用系統緩存,但這是錯誤的:它顯然不會。
我們如何強制每次調用新的DNS解析,繞過OS DNS緩存?
這對我也很有用:我試圖禁用JVM DNS緩存,以便在故障轉移場景中嘗試在負載均衡器的另一端執行所有IP地址。由於我們處於故障轉移場景,因此我無法提前知道新的IP地址,並且也不清楚新IP地址何時會聯機。所以我真的需要每次都進行DNS查詢。 –