बायरन के उत्तर के अनुसार, आप ध्वज का उपयोग करके networkaddress.cache.ttl
या networkaddress.cache.negative.ttl
सिस्टम गुण के रूप में सेट -D
या कॉल System.setProperty
नहीं कर सकते क्योंकि ये सिस्टम गुण नहीं हैं - वे सुरक्षा गुण हैं।
यदि आप इस व्यवहार को ट्रिगर करने के लिए सिस्टम गुण का उपयोग करना चाहते हैं (ताकि आप -D
ध्वज या कॉल का उपयोग कर सकें System.setProperty
), तो आप निम्न सिस्टम सिस्टम सेट करना चाहेंगे :
-Dsun.net.inetaddr.ttl=0
यह सिस्टम गुण वांछित प्रभाव को सक्षम करेगा।
लेकिन ध्यान रखें: यदि आप -D
JVM प्रक्रिया को शुरू करते समय ध्वज का उपयोग नहीं करते हैं और इसके बजाय कोड से कॉल करने का चुनाव करते हैं:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0")
यह कोड नेटवर्किंग संचालन करने के लिए JVM के किसी अन्य कोड से पहले निष्पादित होना चाहिए ।
यह महत्वपूर्ण है क्योंकि, उदाहरण के लिए, यदि आप Security.setProperty
एक .war फ़ाइल में कॉल करते हैं और उस .war को Tomcat पर तैनात करते हैं, तो यह काम नहीं करेगा: Tomcat जावा नेटवर्किंग स्टैक का उपयोग खुद को आपके .war के कोड को निष्पादित करने से पहले शुरू करने के लिए करता है। इस 'रेस कंडीशन' की वजह से, -D
जेवीएम प्रक्रिया शुरू करते समय आमतौर पर ध्वज का उपयोग करना अधिक सुविधाजनक होता है।
यदि आप उपयोग -Dsun.net.inetaddr.ttl=0
या कॉल नहीं करते हैं Security.setProperty
, तो आपको $JRE_HOME/lib/security/java.security
उस फ़ाइल में उन सुरक्षा गुणों को संपादित और सेट करना होगा, जैसे
networkaddress.cache.ttl = 0
networkaddress.cache.negative.ttl = 0
लेकिन उन संपत्तियों के बारे में टिप्पणियों में सुरक्षा चेतावनी पर ध्यान दें। ऐसा केवल तभी करें जब आप उचित रूप से आश्वस्त हों कि आप डीएनएस स्पूफिंग हमलों के लिए अतिसंवेदनशील नहीं हैं ।
java.security.Security
(कम से कम jdk7 में)