JVMはDNSキャッシュを保持している
状況
- サーバ[localhost]上のWebアプリケーションは「example」というホストに通信するように設定されている。(アプリケーションはexampleで動いている訳ではない)
- localhostのhostsを下記のように変更。
- Webアプリケーション側から見るとホストは変更されてないのに変更後のIPに繋がらない。(変更後のIPである「203.0.113.0」に繋がって欲しいのに、変更前のIPである「192.0.2.0」のIPと通信が行われる)
変更前hosts
192.0.2.0 example
変更後hosts
203.0.113.0 example
結論
調べてみたら、デフォルトだとJVMは無期限でDNSキャッシュを保持しているからとの事。
「jre/lib/security/java.security」の「networkaddress.cache.ttl」でキャッシュの保持時間を変更できるらしいので、0に変更したらhosts変更後は新たなipに接続されました。(0はキャッシュの保持を行わない)
変更前java.security
#networkaddress.cache.ttl=-1
変更後java.security
networkaddress.cache.ttl=0