मेरे पास जेबॉस 4.0.2 में एक युद्ध के रूप में तैनात एक सर्वलेट है। मेरे पास तैनात आवेदन के लिए एक गुण फ़ाइल है। मुझे यह फाइल कहां रखना चाहिए? Jboss सर्वर \ default \ conf फ़ोल्डर में conf निर्देशिका के अंतर्गत? मैं पोर्टेबल तरीके से उस गुण फ़ाइल को कैसे लोड करूं?जेबॉस में तैनात जावा सर्वलेट में लोड गुण फ़ाइल
उत्तर
लोड करने के लिए है कि गुण एक पोर्टेबल ढंग से फाइल, सबसे अच्छा तरीका है (WEB-INF/lib/
के नीचे या WEB-INF/classes/
के नीचे या अनुप्रयोग सर्वर classpath पर वेब अनुप्रयोग के classpath पर डाल करने के लिए या तो एक जार में अगर आप चाहते हैं होगा उस फ़ाइल को अपने वेब एप्लिकेशन को पुन: पैकेज किए बिना संपादित करने में सक्षम होने के लिए) और Class#getResourceAsStream(String)
का उपयोग करने के लिए।
निम्नलिखित कोड एक संपत्ति फ़ाइल जो सर्वलेट रूप में एक ही पैकेज में जो कोड निष्पादित होने में रहता है के लिए एक InputStream
हो जाता है:
InputStream inStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("myfile.properties");
फिर, load(InputStream)
यह एक Properties
वस्तु (छोड़ने के अपवाद संचालन) में :
Properties props = new Properties();
props.load(inStream);
सबसे अच्छी जगह यह वेब एप्लिकेशन के खुद डॉक-रूट किया जा रहा है, "./WEB-INF/myapp.properties", जहाँ सर्वलेट कंटेनर अपने .war
या .ear
फ़ाइल अनपैक करने के लिए अर्थात रिश्तेदार की तरह डाल करने के लिए। आप गुण फ़ाइल को .war
में सीधे प्रदान कर सकते हैं।
ServletContext
में एक विधि getRealPath(String path)
है जो फाइल सिस्टम में वास्तविक पथ देता है। वास्तविक पथ का उपयोग करके आप इसे Properties
संग्रह में लोड कर सकते हैं।
अद्यतन अपनी टिप्पणी में कोड "/" के लिए वास्तविक पथ देखने के लिए कोशिश करता है, तो आप अपने गुण के सापेक्ष पथ के लिए पूछना चाहिए के रूप में, फ़ाइल:
String propertiesFilePath = getServletContext().getRealPath("WEB-INF/application.properties");
Properties props = properties.load(new FileInputStream(propertiesFilePath));
इसलिए मैंने निम्न कोशिश की: स्ट्रिंग गुणफाइलपाथ = getServletContext()। GetRealPath ("/") + File.separator + "WEB-INF" + File.separator + "application.properties"; Properties.load (नया फ़ाइल इनपुटस्ट्रीम (गुणफाइलपाथ)); मुझे एक फ़ाइल नॉटफाउंड अपवाद प्राप्त होता है। मैं नहीं देखता कि मैंने क्या गलत किया है। – Carlosfocker
गुण फ़ाइल कर सकते हैं आवेदन के साथ तैनात किया जाना इसे अपने स्रोत पेड़ का हिस्सा बनाते हैं। इसके परिणामस्वरूप गुण फ़ाइल वेब-आईएनएफ/कक्षा फ़ोल्डर में होगी।
यह तो
Properties properties = loadProperties("PropertyFileName.properties", this.getClass());
...
public static Properties loadProperties(String resourceName, Class cl) {
Properties properties = new Properties();
ClassLoader loader = cl.getClassLoader();
try {
InputStream in = loader.getResourceAsStream(resourceName);
if (in != null) {
properties.load(in);
}
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
बस ServletContext की पकड़ पाने के लिए और फिर
InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties");
Properties props = new Properties();
props.load(stream);
यह हमेशा काम करेंगे, चाहे आप एक युद्ध या विस्फोट युद्ध की तैनाती की परवाह किए बिना का उपयोग कर पढ़ा जा सकता है।
जिस परियोजना को इसकी आवश्यकता है उसे रद्द कर दिया गया, इसलिए मैंने कभी भी पालन नहीं किया। – Carlosfocker